您的位置:首页 > 其它

动态规划:最大子段和

2016-04-13 15:01 218 查看
//动态规划:最大子段和(腾讯2面)
int findmaxSum(vector<int>&vs){
vector<int> res(vs.size(),INT_MIN);
res[0] = vs[0];
for(int i=1;i<vs.size();i++){
res[i] = max(res[i-1]+vs[i],vs[i]);
}
int max =INT_MIN;
int end =0;
for(int i=0;i<res.size();i++){
if(max < res[i]){
max = res[i];
end = i;
}
}
int begin =end;
while(res[begin]!=vs[begin]){
begin--;
}
cout<<"The max subSumIndex is between "<<begin<<" and "<<end<<endl;
return max;
}
int main()
{
vector<int>vs1 = {2,-1,3,-7,5,-2,6};
vector<int>vs2 = {-1,-2,-3,-4};
cout<<findmaxSum(vs1)<<endl;
cout<<findmaxSum(vs2)<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: