PAT 1007. Maximum Subsequence Sum
来源:互联网 发布:2016年总决赛数据统计 编辑:程序博客网 时间:2024/05/17 01:40
【题目链接】
看完这个题目的时候我就想到了曾经做过的一个求完美数列的题目,用的是two pointers的思想,这题好像也差不多。本题的关键就是如何确定最大子序列的起始位置i和j,我们用sum变量(初始化为0)来记录元素的和,MaxSum(初始化为负数)来记录最大子序列的和,sum从第一个非负数起开始累加同时更新MaxSum,若sum累加到第k1个位置的时候小于0了,则将sum重置为0,令temp=k1+1,其中temp用来临时记录新的起始位置。如果到达第k2个位置时sum > MaxSum了,则更新MaxSum,同时将i更新为temp,j更新为k。特别值得一提的是,当第一个数为负数的时候,sum < 0则需重置sum为0,此时sum > MaxSum成立,因此MaxSum更新为0,这就引起了错误。同时,还需要注意输入数据可能为0的情况,以及当最大子序列不唯一的时候,按照题意我们应该选取起始位置的序号最小的那个。
PS:读者可以测试一下“-1 0”这样的输入数据
提交代码:
//需要注意的case:-1 0#include <iostream>using namespace std;int main(){ int n, a[10010]; bool isNegative = true; //记录输入的数据是否为负数 cin >> n; for(int i = 0; i < n; i++) { cin >> a[i]; if(a[i] >= 0) isNegative = false; } if(isNegative) //如果输入数据全为负数 { cout << 0 << " " << a[0] << " " << a[n - 1]; return 0; } int sum, MaxSum, i, temp, j, k, flag; //i,j分别记录最大和子序列的起始位置 sum = i = j = k = flag = temp = 0; MaxSum = -1; //不要取为0,防止下面的if(sum > MaxSum)出错 while(k < n) { sum += a[k]; if(sum < 0) temp = k + 1, sum = 0, flag = 1; if(sum > MaxSum) { if(flag) i = temp, flag = 0; j = k; MaxSum = sum; //防止第一个数为负数却更新MaxSum为0,导致第二个为0时无法通过该if判断 } k++; } cout << MaxSum << " " << a[i] << " " << a[j];}
点数
0 0
- (PAT)1007. Maximum Subsequence Sum
- (PAT)1007. Maximum Subsequence Sum
- pat 1007. Maximum Subsequence Sum
- PAT 1007. Maximum Subsequence Sum
- PAT 1007. Maximum Subsequence Sum
- PAT 1007. Maximum Subsequence Sum
- PAT 1007. Maximum Subsequence Sum
- 【PAT】1007. Maximum Subsequence Sum
- PAT - Maximum Subsequence Sum
- 1007. Maximum Subsequence Sum (25)-PAT
- 【PAT】1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- pat 1007. Maximum Subsequence Sum (25)
- PAT A 1007. Maximum Subsequence Sum (25)
- PAT(Advanced level) 1007. Maximum Subsequence Sum*
- PAT 1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- PAT 1007. Maximum Subsequence Sum (25)
- 五、FPGA设计之8比特串并转换设计
- 【自绘ListBox】带图标的ListBox
- 我曾得到的最佳编程建议
- Reverse Linked List - LeetCode 206
- 25个超实用方法教你设计优秀海报
- PAT 1007. Maximum Subsequence Sum
- 在windows7中,visual studioC++ 2010中 mschar插件的使用,MSCHRT20.OCX的注册,如何画曲线图、饼图
- 个人PHP学习笔记(一)--基本语法
- 判别式模型与生成式模型的区别
- 【OC错误】:fatal error: file '/Applications/Xcode 2.app/Contents/Developer/Platforms/MacOSX.platform/Dev
- 伸展树Splay Tree
- 微信气泡状ImageView
- 圆角高亮Button
- svn出错:Error: File or directory '.' is out of date; try updating