给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
Related Topics 数组 分治算法 动态规划
👍 2553 👎 0
反正就是看不懂题目,能想到的就是暴力的逐个字串遍历,但是那样似乎不太好
在答案中能看到有贪心算法,动态规划,下面就用动态规划吧
这动态规划就是将数组的头一直改变,一直改变一直改变
思路:两个变量,一个是用来存结果,一个用来存当前的和
当前的和sum
如果加上nums[i]
小于nums[i]
,那么sum=nums[i]
再将sum
和maxAns
比较
public class MaximumSubarray {
public static void main(String[] args) {
Solution solution = new MaximumSubarray().new Solution();
}
class Solution {
public int maxSubArray(int[] nums) {
// 一个用来存现在的和,一个是最大的和
int sum = 0, maxAns = nums[0];
// 遍历数组
for (int i = 0 ; i < nums.length ; i++) {
// 判断 之前的和大 还是 现在的数大
// 如果是现在的数大,那么之前的和就变成了现在的数
sum = Math.max(nums[i] + sum , nums[i]);
// 将最大的和放进结果变量
maxAns = Math.max(sum , maxAns);
}
return maxAns;
}
}
}