连续子数组最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
动态规划
刚看到这道题有点蒙,除了暴力破解也想不到其他方法。后来看了评论说可以用动态规划解决,就复习了一下之前做过的动态规划的题,最终用动态规划的思想得解。
class Solution {
public int maxSubArray(int[] nums) {
int maxSum = 0;
int temp = nums[0];
for (int i = 0;i<nums.length;i++){
maxSum = nums[i]>=maxSum+nums[i]?nums[i]:maxSum+nums[i];
if (maxSum>=temp){
temp = maxSum;
}
}
return temp;
}
}
其他写法
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
for(int i = 1; i < nums.length; i++) {
nums[i] += Math.max(nums[i - 1], 0);
res = Math.max(res, nums[i]);
}
return res;
}
}
作者:jyd