题目
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:输入:nums = [1] 输出:1 示例 3:
输入:nums = [0] 输出:0 示例 4:
输入:nums = [-1] 输出:-1 示例 5:
输入:nums = [-100000] 输出:-100000
这道题…自己写的暴力算法,超时了…
优解
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
int sum = 0;
for (int num : nums) {
if (sum > 0)
sum += num;
else
sum = num;
res = Math.max(res, sum);
}
return res;
}
}
由sum来控制一段一段的值是多少,小于零肯定就不是最大的了,所以直接sum = num,相当于就是告诉你开始加新的一段值了,从num开始的一段值,然后在开始判断,sum大于0就可以一直加下去,这样就能获得最大值了
我之前的想法就是不断的循环去做这道题,很明显太蠢了,而且这道题也引入了新的知识点,动态规划。
这个博主写的关于动态规划的内容,还不错
动态规划
什么是动态规划?
动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。
dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.
以上定义来自维基百科,看定义感觉还是有点抽象。简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。
上面内容取自https://cloud.tencent.com/developer/article/1817113
1881

被折叠的 条评论
为什么被折叠?



