PAT菜鸡笔记1007 Maximum Subsequence Sum

PAT菜鸡笔记1007 Maximum Subsequence Sum

思路:

这题就是找最大子列和和对应位置的元素,这个好像是有标准模板的,我的代码是根据那个思路自己写的,可能比较奇怪。
先取序列第一项作为最大子列和,遍历序列。设当前遍历到第j个元素,则会出现以下几种情况:

  1. sum<=0且第j个元素>=0,则放弃之前的子列,将左部、sum均归到这个位置,更新max
  2. sum>0且第j个元素>0,则把当前元素囊括进来,更新max
  3. 其他情况,统一掠过
    最后,判断一下max的值,max<0就输出0,和头尾元素。
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int test[10001];
int main() {
	int K,left=0,right=0,Max=-1,sum=0;
	int i =0, j = 0;
	scanf("%d", &K);
	for (int i = 0; i < K; i++)
	{
		scanf("%d", &test[i]);
	}
	Max = test[0];
	while (j < K)
	{
		if (sum<=0&&test[j]>=0)
		{
			i = j;
			sum = test[j];
			if (Max < sum)
			{
				left = i;
				right = j;
				Max = sum;
			}
		}else
			if (sum > 0 && test[j] > 0)
			{
				sum += test[j];
				if (Max < sum)
				{
					left = i;
					right = j;
					Max = sum;
				}
			}else
				sum += test[j];
		j++;
	}
    if(Max<0)
    {
        Max=0;
        left=0;
        right=K-1;
    }
	printf("%d %d %d", Max, test[left], test[right]);
	return 0;
}
上一篇:刷题152. Maximum Product Subarray


下一篇:ArcGIS Server query Error performing query operation