【劍指offer】連續子數組的最大和,C++實現


原創博文,轉載請注明出處!
本題牛客網地址

博客文章索引地址

博客文章中代碼的github地址

# 題目

      輸入一個整形數組,數組里有正數也有負數。數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值,時間復雜度為O(n)。

# 思路

  分析計算連續子數組最大和的規律。下圖是我們計算數組(1,-2,3,10,-4,7,2,-5)中子數組的最大和的過程。設置兩個輔助變量,累加子數組和cur_sum、最大子數組和max_sum。初始的累加子數組和cur_sum為數組的第一個元素,初始的最大子數組和max_sum為數組的第一個元素。更新cur_sum方法:如果cur_sum>0,則繼續累加;否則用下一個元素值替換累加的子數組和。更新max_sum方法:如果cur_sum >max_sum,則用累加的子數組和替換最大的子數組和。

劍指Offer(三十):連續子數組的最大和

# 代碼

  1 class Solution {
  2 public:
  3     int FindGreatestSumOfSubArray(vector<int> array)
  4     {
  5         // 魯棒性
  6         if(array.empty())return 0;
  7 
  8         // 輔助變量
  9         int cur_sum = array[0];// cur_sum為當前和
 10         int max_sum = array[0];// max_sum為最大和
 11 
 12         // 遍歷所有元素
 13         for(int i = 1; i < array.size(); ++i)
 14         {
 15             // 更新cur_sum
 16             if(cur_sum <= 0){
 17                 cur_sum = array[i];
 18             }
 19             else{
 20                 cur_sum += array[i];
 21             }
 22             // 跟新max_sum
 23             if(cur_sum > max_sum){
 24                 max_sum = cur_sum;
 25             }
 26         }
 27         return max_sum;
 28     }
 29 };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM