有一个数组,让找到两个不重复的连续子序列A,B ,求Max(Sum(A)-Sum(B)。
2017-09-06 21:57
225 查看
有一个数组,让找到两个不重复的连续子序列A,B ,求Max(Sum(A)-Sum(B)。
int Maxsum(vector<int>&A)
{
int sum=0,ma=-10000;
vector<int>sumA;
vector<int>sumB;
for(int i=0;i<A.size();i++)
{
sum+=A[i];
ma=max(ma,sum);
sumA.push_back(ma);
if(sum<0)sum=0;
}
sum=0,ma=10000;
for(int i=A.size()-1;i>0;i++)
{
sum+=A[i];
ma=min(ma,sum);
sumB.push_back(ma);
}
int ans=-1000;
for(int i=0;i<A.size();i++)
ans=max(ans,sumA[i]-sumB[i+1]);
return ans;
}
int Maxsum(vector<int>&A)
{
int sum=0,ma=-10000;
vector<int>sumA;
vector<int>sumB;
for(int i=0;i<A.size();i++)
{
sum+=A[i];
ma=max(ma,sum);
sumA.push_back(ma);
if(sum<0)sum=0;
}
sum=0,ma=10000;
for(int i=A.size()-1;i>0;i++)
{
sum+=A[i];
ma=min(ma,sum);
sumB.push_back(ma);
}
int ans=-1000;
for(int i=0;i<A.size();i++)
ans=max(ans,sumA[i]-sumB[i+1]);
return ans;
}
相关文章推荐
- 一个无序整数数组中找到最长连续序列(Longest Consecutive Sequence)和两个元素使得相差最小
- [经典面试题][谷歌]一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素
- 第五十五篇:删除一个数组中多个连续或不连续重复的数字,保留一个
- 已知一个数组int[98],该数组里面存储了0~99共100个数字中的98个,数字不重复,请用算法算出0~99中缺少的2个数字是哪两个?
- 找到一个数组中相加为特定数值的两个元素
- 实现求出若干整数之和为500的连续整数(如98,99,100,101,102)的所有组合&&产生一个int数组,长度为100,并向其中随机插入1~100,要求不能重复
- 算法随机在一定范围内(min-max)选出m个不重复的数据放到一个数组中
- HDU 1024 Max Sum Plus Plus(动态规划,给定一个数组,求其分成m个不订交子段和最大值的题目)
- 两个数组,大小都为n,两个数组里有相同的元素,设计一个算法,找到两个数组中相同的元素
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- 通过两个数字构建一个连续的数组
- 在一个数组中查找两个重复出现两次的数
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 在一个数组中找到不重复的值(也可以改成第一个不重复的值)
- (笔试中的题目)一个已经排序好的数组找到两个数字相加等于一个给定的数
- hdu 1024 Max Sum Plus Plus 一串数字中,m段连续数字最大和 滚动数组+dp
- hdoj Max Sum Plus Plus 1024 (DP) m个连续数组最大和
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合