LeetCode 53. Maximum Subarray
来源:互联网 发布:mac版qq文件夹在哪里 编辑:程序博客网 时间:2024/06/03 13:57
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
.
解题思路:
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; }}
阅读全文
0 0
- [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
- LeetCode 53. Maximum Subarray
- [LeetCode]53. Maximum Subarray
- 53. Maximum Subarray LeetCode
- [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
- Leetcode:53. Maximum Subarray
- 【51Nod】1095 Anigram单词
- Scala学习笔记
- mongdb的查询深入
- This
- 开源搜索平台选型:ElasticSearch、Solr
- LeetCode 53. Maximum Subarray
- Servlet之生命周期
- 原型和原型链继承
- [DP]392. Is Subsequence
- Java学习路线之基础篇
- NDK学习笔记(1)——第一个jni程序
- Grunt 新手一日入门
- [FFT] [HDU4609] 3-idiots
- 游行者-达瓦更扎