給定乙個陣列,查詢這個陣列的子陣列的最大和
比如{-2,5,3,-6,4,-8,6}
輸出最大和8
分析:假設已經找到乙個子陣列的最大和,這個子陣列是從陣列索引i到索引j。
可以用如下式子描述,cur_max = a[i , j]; 對於下乙個數,也就是索引為j+1,這個最大和是否
將a[j+1]加入cur_max,需要考慮cur_max的值和a[j+1];
如果當前的cur_max小於0,說明a[j+1] > a[i, j] + a[j]; cur_max = a[j+1];說明此時最大值從索引j+1開始
如果當前的cur_max大於或者等於0,cur_max = cur_max + a[j+1]。
每一輪需要比較cur_max和記錄的max值進行比較更新。
此演算法的時間複雜度為o(n) 空間複雜度為o(1);
原始碼:int maxsum( const int* numbers, unsigned int n )
return max;
}void main()
;//int nums = ;
cout << maxsum( nums, sizeof(nums) / sizeof(int) ) << endl;
system("pause");
}
子陣列之和的最大值
感謝firo july 2010.06.05。algorithm 1 時間效率為o n n n intmaxsubsequencesum1 const inta,intn return maxsum algorithm 2 時間效率為o n n intmaxsubsequencesum2 const...
2 14 子陣列之和的最大值
問題 求陣列的子陣列之和的最大值 解法一 遍歷 include include int maxsum int a,int n if sum maximum maximum sum return maximum int main printf d n maxsum array,5 return 0 解...
2 14 子陣列之和的最大值
問題 求陣列的子陣列之和的最大值 解法一 遍歷 include include int maxsum int a,int n if sum maximum maximum sum return maximum int main printf d n maxsum array,5 return 0 解...