力扣 題目53--最大子陣列和
阿新 • • 發佈:2022-05-16
題目
題解
最大和 返過來說不就是 和為負數的隔開 就可以了 即注意要比較一下最大值
-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) {View Code7 //左 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 }