1. 程式人生 > 其它 >力扣 題目53--最大子陣列和

力扣 題目53--最大子陣列和

題目


題解

最大和  返過來說不就是 和為負數的隔開 就可以了 即注意要比較一下最大值

-2,1,-3,4,-1,2,1,-5,4

-2 最大是-2

1,-3 是負數  最大是1

4 -1 2 1 -5 4  最大是6 結果

左邊可以和為負數的隔開 那麼右邊也同理

程式碼

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 class Solution {
 5 public:
 6     int maxSubArray(vector<int>& nums) {
7 // 8 int num = 0; 9 // 10 int renum = 0; 11 int subscript = nums.size(); 12 int max = INT_MIN; 13 for (int i = 0; i < nums.size(); i++) { 14 //記錄左開始的加和 15 num += nums[i]; 16 //記錄右開始的加和 17 renum+= nums[nums.size()-1
-i]; 18 //比較值 19 if (max < num) { 20 max = num; 21 } 22 //如果左加和為0或者小於0 重新開始計數 23 if (num <= 0) { 24 num = 0; 25 } 26 //如果右加和為0或者小於0 則遍歷到nums.size() - 1 - i 即可 然後重新開始計數 27 if (nums.size() - 1
- i>i&&renum < 0) { 28 subscript = nums.size() - 1 - i; 29 renum = 0; 30 } 31 } 32 return max; 33 } 34 }; 35 int main() { 36 Solution sol; 37 vector<int> nums = { 5,4,-1,7,8 }; 38 int num=sol.maxSubArray(nums); 39 cout << num << endl; 40 }
View Code