我已经解决了hackerrank(https://www.hackerrank.com/challenges/maxsubarray)中最大的子阵列问题。它在代码块上运行良好。但是当我提交我的解决方案时,它会在控制台中给出不同的答案。
#include<bits/stdc++.h>
using namespace std;
int main() {
int no,n,i;
cin>>no;
while(no--){
int arr[100001]={0},arr1[100001]={0};
cin>>n;
for(i=0;i<n;i++)
cin>>arr[i];
arr1[0]=arr[0];
int maxi=arr[0];
for(i=1;i<n;i++){
if(arr[i]+arr1[i-1]>arr[i]){
arr1[i]=arr[i]+arr1[i-1];
}
else{
arr1[i]=arr[i];
}
if(arr1[i]>maxi)
maxi=arr1[i];
}
cout<<maxi<<" ";
sort(arr,arr+n);
int sum=0,i=n-1;
while(arr[i]>0)
sum+=arr[i--];
if(sum==0)
sum=arr[i];
cout<<sum<<endl;
}
return 0;
}
任何人都可以对解决方案进行更正吗?
答案 0 :(得分:2)
while(arr[i]>0)
sum+=arr[i--];
这可能是垃圾,因为我可以低于0。
例如,输入
1
4
1 2 3 4
我发现您的代码错误地输出了10 14
。