我如何使我的代码更高效,我在Hackerrank上遇到了“由于超时而终止”的问题。 请提出我应该进行的更改以避免此错误。
也是,嵌套的for循环会在某种程度上引起此问题吗?
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n,k;
cin>>n>>k;
int **arr = new int*[n]();
for (long i = 0 ; i < n ; i++)
{
arr[i] = new int[n]();
}
for(int i =0;i<n;i++)
{
int b;
cin>>b;
for(int j=0;j<b;j++)
{
cin>>arr[i][j];
}
}
for(int j=0;j<k;j++)
{
int a,b;
cin>>a;
cin>>b;
cout<<arr[a][b]<<endl;
}
return 0;
}
答案 0 :(得分:1)
您为每行中的n
个元素分配了内存,但是您访问了每行中的b
个元素。对于b < n
,这可能会降低性能,而对于b > n
,这会导致未定义的行为。
还应避免在每次输出后冲洗。
++i
可以比i++
更快,并且永远不应该慢于#include <iostream>
using namespace std;
int main() {
int n,k;
cin>>n>>k;
int **arr = new int*[n]();
for (long i = 0 ; i < n ; ++i) // <-- ++i instead of i++
{
int b;
cin>>b;
arr[i] = new int[b](); // <-- allocate memory for b elements
for(int j=0;j<b;++j) // <-- ++i instead of i++
{
cin>>arr[i][j];
}
}
for(int j=0;j<k;++j) // <-- ++i instead of i++
{
int a,b;
cin>>a;
cin>>b;
cout<<arr[a][b]<<'\n'; // <-- don't flush on each line break
}
return 0;
}
。
删除未使用的标题。
{{1}}