题目
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
思路
采用动态规划,直接修改原数组,dp[i]的值代表以nums[i]结尾的连续子数组和的最大值
代码
下面展示大小堆的方法 代码片
.
// An highlighted block
class Solution {
public int maxSubArray(int[] nums) {
int result = nums[0];
for(int i=1;i<nums.length;i++){
nums[i] = Math.max(nums[i],nums[i-1]+nums[i]);
//nums[i] = nums[i-1]>0? nums[i-1]+nums[i]:nums[i];
result = Math.max(result, nums[i]);
}
return result;
}
}