0
点赞
收藏
分享

微信扫一扫

LeetCode Hot100-53(容易)

七千22 2022-02-23 阅读 45

解题思路

  1. 直接遍历法

    1. hisMax:历史最大值,函数最终返回的就是hisMax
    2. preMax:cur值用来判断是否要加上之前的值,还是舍弃之前的值,直接用preMax=cur;
      1. 因为preMax如果是负数,cur是正数。那么cur值应该放弃加上preMax。cur直接赋值给preMax;

    preMax = max(num,preMax + num);

    hisMax = max(hisMax,preMax);

  2. 分治法


53.最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例1:

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

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解

class Solution {
public:
    int maxSubArray(vector<int>& nums) 
	{
		if (nums.empty()) { return 0; }
		int hisMax = nums[0];   // 历史最高
		int preMax = 0;         // 上1次最大值(没有加当前idx的值)
		for (auto& num:nums)
		{
			// 上次最大值如果是负数,当前值是正数。
            //那么cur值应该舍弃之前的负数;赋值给目前为止最大值preMax;
            preMax = max(num,preMax + num); 
			hisMax = max(hisMax,preMax);
		}
		return hisMax;
	}
};
举报

相关推荐

leetcode/hot100

【LeetCode】HOT 100(15)

LeetCode Hot100-20

leetcode-hot100-图论

LeetCode hot100-10

LeetCode 热题 HOT 100

LeetCode Hot100 31~40

LeetCode hot100-49-N

0 条评论