给定一个序列(至少含有 1 个数),从该序列中寻找一个连续的子序列,使得子序列的和最大。
例如,给定序列 [-2,1,-3,4,-1,2,1,-5,4],
连续子序列 [4,-1,2,1] 的和最大,为 6。
详见:https://leetcode.com/problems/maximum-subarray/description/
Java实现:
方法一:暴力解
class Solution { public int maxSubArray(int[] nums) { int size=nums.length; if(size==0||nums==null){ return Integer.MIN_VALUE; } int maxSum=Integer.MIN_VALUE; for(int i=0;i<size;++i){ int curSum=0; for(int j=i;j<size;++j){ curSum+=nums[j]; if(curSum>maxSum){ maxSum=curSum; } } } return maxSum; } }
方法二:
class Solution { public int maxSubArray(int[] nums) { int size=nums.length; if(size==0||nums==null){ return Integer.MIN_VALUE; } int maxSum=nums[0]; int curSum=nums[0]; for(int i=1;i<size;++i){ if(curSum<0){ curSum=nums[i]; }else{ curSum+=nums[i]; } if(curSum>maxSum){ maxSum=curSum; } } return maxSum; } }