剑指 Offer 42. 连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

答案:

 1 class Solution {
 2     public int maxSubArray(int[] nums) {
 3         int res = 0;
 4         int maxNum = nums[0];
 5         for(int i = 0 ; i < nums.length ; i++){
 6             res = Math.max(nums[i] , nums[i] + res);//以当前元素为结尾的数组的最大和,以前一个数结为的最大值,加上当前这个数会不会变大
 7             maxNum = Math.max(maxNum , res);
 8         }
 9         return maxNum;
10     }
11 }

Sumup:

对于样例给出的执行结果是:

num[i]   -2  1  -3  4  -1  2  1  -5  4

res       0  -2  1  -2  4  3  5  6  1  5

maxNum  -2  -2  1  1  4  4  5  6  6  6

res表示的是以当前元素为结尾的数组的最大和

maxNum表示的是目前累计的最大的最大数

posted @ 2022-02-13 20:59  Nickeyhu  阅读(21)  评论(0编辑  收藏  举报