1007. Maximum Subsequence Sum (25)
2018-01-04 15:38
239 查看
#include<iostream> using namespace std; int a[10000]; int main() { int N; cin >> N; for (int i = 0; i < N; i++) cin >> a[i]; int thislist = 0, maxlist = 0; int i; int front = 0, rear = 0, mf = 0, mr = 0; for (i = 0; i < N; i++) { thislist += a[i]; if (thislist > maxlist) //尾更新一下,头还是front,头要赋值的,因为头可能会变,下一个子列这种 { maxlist = thislist; mr = rear=i; mf = front; } if (thislist < 0) //加了a[i]之后小于0,说明这个数是负的,front和rear从下一个开始 { front = rear = i+1; thislist = 0; } } int flag=-1; if (maxlist == 0) { for (int i = 0; i < N; i++) { if (a[i] == 0) { flag = i; break; } } if (flag != -1) cout << 0 << " " << a[flag] << " " << a[flag]; else cout << 0 << " " << a[0] << " " << a[N - 1]; } else cout << maxlist << " " << a[mf] << " " << a[mr]; return 0; }
思路是陈越老师课上讲的那个时间复杂度为O(N)的算法
最后maxlist为0有两种情况,一个是全部都是负数,还有一个是序列中有0(不可能是和为零,因为如果这样说明有正数,最大值不会是零)
front和rear记录当前序列的头和尾,mf和mr记录最大子列和的头和尾
相关文章推荐
- 1007. Maximum Subsequence Sum (25)
- PAT甲 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT练习(4)-1007. Maximum Subsequence Sum (25)
- 【PAT Advanced Level】1007. Maximum Subsequence Sum (25)
- PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和
- pat 1007. Maximum Subsequence Sum (25)
- PAT甲级 1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT (Advanced) 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 最大连续子数组,一次遍历,stack辅助
- PAT A 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25) 最大子序列和
- 【c++】PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)*
- 1007. Maximum Subsequence Sum (25)
- 1007. Maximum Subsequence Sum (25)(C++)