LeetCode 53. Maximum Subarray
2017-05-30 00:02
405 查看
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
解题思路:
sum: 初始值是数组的第一个元素,找到第一个正数后,再给sum赋初值,然后指针向后移,保证sum的和大于0
maxsum: 存放最大的子数组和,初值先赋值为第一个元素值
首先找到第一个正数,在找正数的过程中,将最大的复数赋值给maxsum,这样就可以保证数组全负时,maxsum仍然是最大值。
如果找到了正数,则先将第一个正数的值赋值给sum,每次加上一个正的数组元素时,都对sum和maxsum进行判断,保存最大值,如果加上了一个负的数组元素,但sum还是为正数,就直接将数组元素累计在sum中,如果加上负的数组元素后,sum小于等于0,先sum和maxsum的值进行判断,保存最大的值,然后指针再向后移,判断出现的第一个正数,并和maxsum比较,以防后面的元素拉低了第一个出现正数的值。
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.
解题思路:
sum: 初始值是数组的第一个元素,找到第一个正数后,再给sum赋初值,然后指针向后移,保证sum的和大于0
maxsum: 存放最大的子数组和,初值先赋值为第一个元素值
首先找到第一个正数,在找正数的过程中,将最大的复数赋值给maxsum,这样就可以保证数组全负时,maxsum仍然是最大值。
如果找到了正数,则先将第一个正数的值赋值给sum,每次加上一个正的数组元素时,都对sum和maxsum进行判断,保存最大值,如果加上了一个负的数组元素,但sum还是为正数,就直接将数组元素累计在sum中,如果加上负的数组元素后,sum小于等于0,先sum和maxsum的值进行判断,保存最大的值,然后指针再向后移,判断出现的第一个正数,并和maxsum比较,以防后面的元素拉低了第一个出现正数的值。
public class Solution { public int maxSubArray(int[] nums) { int lastpos; int sum=nums[0],maxsum=nums[0]; int i=0; while(i<nums.length){ if(nums[i]<=0){ if(nums[i]>maxsum){ maxsum=nums[i]; //记录下最大的非正数数值 } i++; }else{ sum = nums[i]; maxsum=maxsum>sum?maxsum:sum; break; //找到了第一个正数 } } if(i<nums.length){ //说明数组中有正数 i++; while(i<nums.length){ if(sum+nums[i]>0 && nums[i]<=0){ sum =sum + nums[i]; i++; }else if(nums[i]>0){ sum =sum + nums[i]; maxsum=maxsum>sum?maxsum:sum; i++; }else{ maxsum=maxsum>sum?maxsum:sum; i++; while(i<nums.length && nums[i]<=0){ //找到第一个正数 i++; } if(i>=nums.length){ return maxsum; }else{ sum=nums[i]; maxsum=maxsum>sum?maxsum:sum; i++; } } } } // maxsum=maxsum>sum?maxsum:sum; return maxsum; } }
相关文章推荐
- 【Leetcode】53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- [LeetCode]--53. Maximum Subarray
- leetCode刷题归纳-Dynamic Programming(53. Maximum Subarray&& 152. Maximum Product Subarray)
- 53. Maximum Subarray LeetCode
- leetcode 53. Maximum Subarray
- LeetCode-53. Maximum Subarray
- LeetCode WIith JS || 53. Maximum Subarray[寻求最大连续序列]
- leetcode 53. Maximum Subarray
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- LeetCode 53. Maximum Subarray
- [LeetCode By Python]53. Maximum Subarray
- [leetcode] 53. Maximum Subarray
- [LeetCode] 53. Maximum Subarray
- [LeetCode] 53. Maximum Subarray
- LeetCode53. Maximum Subarray
- LeetCode 53. Maximum Subarray
- 【Leetcode】53. Maximum Subarray
- 【LeetCode】53. Maximum Subarray
- LeetCode *** 53. Maximum Subarray