题目:
- 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
- 注意,子序,是有序的.
解法逻辑
- 迭代获取每一个元素 num[i]
- 用sum 类承接每一个num[i] 或者 num[i]+sum 的结果,这是在loop体内完成的;
- 用result 承接每次最新的累加结果, 当然,这一步也是需要做一个比较的,sum值要是大于result,那就用sum值更新result;
上代码
class Solution {
public int maxSubArray(int[] nums) {
int length ;
if(nums==null||(length=nums.length)==0){
return 0;
}
int result = nums[0];
// 取第0 个位置的数
int sum = nums[0];
for(int i = 1;i<length;i++){
// 有可能result + nums[i]以后 ,得到的值,居然比ssum还小,这就不符合我们的初衷,对不对?
// 这个时候,我们要做一个比较,二者之间,取最大者即可;借助Math.max();
sum = Math.max(nums[i],sum+nums[i]);
if(sum>result){
result = sum;
}
}
return result;
}
}
ps
- 这道题,在leetcode 上的level 是easy,不仔细想的话,还真解答不出来;即便觉得自己会了,还是要强加练习
todo
- 等复习动态规划了,用dp解答一下,我觉得有门;
- 等复习 滑动窗口了,用sliding window 解答一下,我觉得有戏;