一_数组最大连续子序列
题目描述:给定一个数组,求出它的最大连续子序列和
思路:根据贪心策略,我们知道,由局部最优可以推导出全局最优
1.那么在本题中什么是局部最优呢?
我们可以看出每选取的一个集合(一个元素或多个元素)它的和为正数时,它对我们的最大和的全局最优是有帮助的
2.那么什么时候对我们的全局最优是没有帮助的呢?
当集合内元素的和为负数时,我们肯定不会选取这个集合内部的这几个相邻的元素.再重新选取紧邻集合右边的下一个正向元素,作为一次新的开始.
3.我们在不断选取的过程中,如何记录最大值MAX呢?
记录一个变量,这个变量记录再加入当前选取的这个元素与上一次的最大和MAX相比,取最大的即可,我们遍历完数组,发现时间复杂度为O(n),空间复杂度为O(1),是不是很棒?!
代码如下:
#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
int main()
{
vector<int> V;
int MAX = 0;
int n;
int temp;
int sum = 0;
while (scanf_s("%d", &n) && n)
{
V.clear(); //注意每一轮开始的时候都要重新计数
MAX = 0;
sum = 0;
for (<