[LeetCode] 53. Maximum Subarray
2018-02-05 22:16
447 查看
题:https://leetcode.com/problems/maximum-subarray/description/
题目
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
the contiguous subarray
click to show more practice.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
思路
设置两个指针 left,right。left为 subarray的 最左的下标减一,right为subarray的 最右下标。
right从0开始向array的最右扫描,不断更新subarray对应的subsum。若subsum>maxsum则将 left,right分别保存为maxleft与maxright。(将maxsum设置为 第一的 array的数值,应为subsum一定会遍历到最大的subsum,所以对于maxsum值无所谓,只是初始化maxsum时该值一定要合理)
若subsum小于零,则对于后面的数来说,前面subarray 只会拉低自己的值,所以subarray不要包含前面的和。
Code
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==0) return 0;
int maxsum = nums[0];
int subsum =0;
int maxright,maxleft,left,right;
left = -1;
for(right = 0;right<nums.size();right++){
subsum += nums[right];
if(subsum>maxsum){
maxsum = subsum;
maxright = right;
maxleft = left;
}
if(subsum<0){
left = right;
subsum = 0;
}
}
return maxsum;
}
};改进
其实对于left 、right 这些下标都没有什么作用,只是获取最大值就可以了。
Code
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ans = nums[0],sum = 0;
for(int i = 0 ; i<nums.size();i++){
sum += nums[i];
ans = max(sum,ans);
sum = max(sum,0);
}
return ans;
}
};
题目
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
[-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray
[4,-1,2,1]has the largest sum =
6.
click to show more practice.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
思路
设置两个指针 left,right。left为 subarray的 最左的下标减一,right为subarray的 最右下标。
right从0开始向array的最右扫描,不断更新subarray对应的subsum。若subsum>maxsum则将 left,right分别保存为maxleft与maxright。(将maxsum设置为 第一的 array的数值,应为subsum一定会遍历到最大的subsum,所以对于maxsum值无所谓,只是初始化maxsum时该值一定要合理)
若subsum小于零,则对于后面的数来说,前面subarray 只会拉低自己的值,所以subarray不要包含前面的和。
Code
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if(nums.size()==0) return 0;
int maxsum = nums[0];
int subsum =0;
int maxright,maxleft,left,right;
left = -1;
for(right = 0;right<nums.size();right++){
subsum += nums[right];
if(subsum>maxsum){
maxsum = subsum;
maxright = right;
maxleft = left;
}
if(subsum<0){
left = right;
subsum = 0;
}
}
return maxsum;
}
};改进
其实对于left 、right 这些下标都没有什么作用,只是获取最大值就可以了。
Code
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int ans = nums[0],sum = 0;
for(int i = 0 ; i<nums.size();i++){
sum += nums[i];
ans = max(sum,ans);
sum = max(sum,0);
}
return ans;
}
};
相关文章推荐
- LeetCode 53. Maximum Subarray
- LeetCode - 53. Maximum Subarray - C++
- LeetCode 53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- leetcode 53. Maximum Subarray
- LeetCode *** 53. Maximum Subarray
- LeetCode-53. Maximum Subarray
- LeetCode --- 53. Maximum Subarray
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- LeetCode 53. Maximum Subarray
- [leetcode] 53. Maximum Subarray
- leetcode-53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- LeetCode53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- LeetCode53. Maximum Subarray
- leetcode 53. Maximum Subarray
- 【LeetCode】53. Maximum Subarray
- LeetCode53. Maximum Subarray