最大子数组(LintCode)
最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
样例
给出数组[−2,2,−3,4,−1,2,1,−5,3]
,符合要求的子数组为[4,−1,2,1]
,其最大和为6
注意
子数组最少包含一个数
挑战
View Code
要求时间复杂度为O(n)
若当前和小于0,那么加到下一个数上必然会使和减小,此时抛弃这个和重新求和。当遇到一个负数时,记录下当前已知的最大和。
总耗时: 2721 ms
1 public class Solution { 2 /** 3 * @param nums: A list of integers 4 * @return: A integer indicate the sum of max subarray 5 */ 6 public int maxSubArray(int[] nums) { 7 int sum = nums[0]; 8 int max = nums[0]; 9 for(int i = 1 ;i < nums.length ;i++) { 10 if(nums[i] < 0) { 11 if(sum > max) max = sum; 12 } 13 14 if(sum < 0) { 15 sum = nums[i]; 16 }else { 17 sum+=nums[i]; 18 } 19 } 20 return max>sum?max:sum; 21 } 22 }