LeetCode 53. 最大子序和(Maximum Subarray)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 53. 最大子序和(Maximum Subarray)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一次提交成功
class Solution { public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) return nums[0];//int sum = -1;vector<int> submax;for (int i = 0; i < nums.size(); i++){if (sum >= 0){sum = sum + nums[i];submax.push_back(sum);}else{sum = nums[i];submax.push_back(sum);}}int max = submax[0];for (int i = 1; i < submax.size(); i++) {if (max < submax[i]) max = submax[i];}return max;} };這里我的思路是包含當前nums[i]的連續子數組的最大和(按序號只算i左邊的),所以當前一個nums[i-1]處的最大值是負數時,nums[i]處的最大值就是nums[i]本身,當nums[i-1]處的最大值大于零,nums[i]處的最大值就是sum + nums[i]
對于nums中的第一個元素nums[0],我利用初始sum = -1,在循環中進入else把第一個位置最大值修改為nums[i]
第二次嘗試:
其實對于上面的第二個循環并不必要,完全可以在第一個中進行。
class Solution { public:int maxSubArray(vector<int>& nums) {if (nums.size() == 1) return nums[0];//int max = nums[0]; int sum = -1;for (int i = 0; i < nums.size(); i++){if (sum >= 0){sum = sum + nums[i];}else{sum = nums[i];}if (sum > max) max = sum;}return max;} };雖然這個sum初始化為-1看起來很巧妙,但是卻有一點本末倒置,畢竟這是一個求和問題,sum初始化為0要更易于理解。
第三次嘗試:先加為敬!
class Solution { public:int maxSubArray(vector<int>& nums) {int max = nums[0]; int sum = 0;for (int i = 0; i < nums.size(); i++){sum += nums[i];if (sum > max) max = sum;if (sum < 0) sum = 0;}return max;} };判斷只有一個元素也是多余的!頂多判斷一個空數組,但是題目中說了至少有一個值。
總結
以上是生活随笔為你收集整理的LeetCode 53. 最大子序和(Maximum Subarray)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端基础:初步认识Chrome调试面板,
- 下一篇: 漫画:程序员真的是太太太太太太太太难了!