1. 程式人生 > >求連續子陣列的最大和

求連續子陣列的最大和

明確題意: 一: 連續 二: 求和,並不需要返回子陣列的位置 三: 整數:負整數,0,正整數

解法一:O(N^2)

int  MaxSum(int *arr,int length )  //表示陣列的所有連續的子集
{
     if (arr == NULL||length <=0)
     {
          return -1;
     }
     int Max = -1;

     for (int i = 0; i < length; i++) //外迴圈i代表子集的起始位置
{ int sum = 0; for (int j = i; j < length;j++) // 內迴圈j代表子集從起始位置開始連續相+ { for (int k = i; k < j;k++) :可以使用3層迴圈,第三層迴圈是根據不同子集的元素個數而進行求和 sum += arr[j]; if (sum > Max) { Max = sum; } } } return
Max; }

解法二:O(N)

int FindGreatestSumOfSubArray(vector<int> array) {
     int Max = -1;
     int sum = 0;
     for (int i = 0; i < array.size();i++)
     {
          if (sum<=0)
          {
              sum = array[i];
          }
          else
          {
              sum += array[i];
          }
          if
(Max < sum) Max = sum; } return Max; }