连续子数组的最大和

来源:互联网 发布:智慧树网络课答案 编辑:程序博客网 时间:2024/04/28 14:13

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

思路:

1)如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。

2)当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。

3)当前值与最大值比较,大于时要更新最大值

#include<iostream>using namespace std;bool flag=false;int FindSubArray(int *arr, int len){  if(arr==NULL||len<=0)  {    flag=true;    return 0;  }  flag=false;  int curr=0;  int sum=0x80000000;  for(int i=0;i<len;i++)  {    if(curr<=0)      curr=arr[i];    else      curr+=arr[i];    if(curr>sum)      sum=curr;  }  return sum;}int main(){  int arr[8]={1,-2,3,10,-4,7,2,-5};  int result=0;  result=FindSubArray(arr,8);  cout<<result<<endl;  return 0;}


原创粉丝点击