【发布时间】:2019-10-05 06:57:03
【问题描述】:
以下两种说法有什么区别?
i) long long int ar[n+1];
ii) long long int *ar=new long long int[n+1]();
对于hackerrank中的数组操作问题,我的代码在使用第一个语句时失败了一些测试用例,但在第二个语句中得到了正确的答案。
int main()
{
long long int n,m,a,b,k,i,x=0,maxi=INT_MIN;
cin>>n>>m;
//long long int ar[n+1];
long long int *ar=new long long int[n+1]();
while(m--) {
cin>>a>>b>>k;
ar[a]+=k;
if((b+1)<=(n))
ar[b+1]-=k;
}
for(i=1;i<=n;i++) {
x=x+ar[i];
if(maxi<x)
maxi=x;
}
cout<<maxi;
return 0;
}
【问题讨论】:
-
区别:首先是格式不正确,其次是格式正确(但不推荐)。
-
您的第一次尝试没有初始化数组元素,当您稍后使用它们的不确定值时会导致未定义的行为。