最大子数组和【力扣53】

一、解题思路

Max[i]表示:以nums[i]为开头的所有连续子数组和的最大值。

由此可以推出Max[i-1]和Max[i]的关系:

若Max[i]>=0:Max[i-1]=nums[i-1]+Max[i];

否则:Max[i-1]=nums[i-1];

则ans=MAX(Max[0]、Max[1]、......、Max[n-1])

代码示例:

class Solution {
public:
    int maxSubArray(vector& nums) {
        int max,sum,n;
        n=nums.size();
        sum=nums[n-1];
        max=nums[n-1];
        for(int i=n-2;i>=0;i--){
            if(max>=0){
                max+=nums[i];
            }else{
                max=nums[i];
            }
            if(sum

二、拓展

同样的思路,可以计算Min[i]:以nums[i]为开头的所有连续子数组和的最小值。

这道题可以和力扣以下的题目相互照应做,其核心思路相同:

1749. 任意子数组和的绝对值的最大值 - 力扣(LeetCode)icon-default.png?t=N6B9https://leetcode.cn/problems/maximum-absolute-sum-of-any-subarray/1749题:该题要求计算连续子数组和的绝对值的最大值ans,其中ans可以是最大值的绝对值,也可以是最小值的绝对值。因此ans=MAX(abs(Max[0])、......、abs(Max[n-1]),abs(Min[0])、......、abs(Min[n-1]))。

1749题另一个解题思路:

任意子数组和的绝对值的最大值【力扣1749】_叫小侯的小白程序员的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/qq_44228301/article/details/132190945这个思路中Min[i]、Max[i]的意义和本题是不同的。

你可能感兴趣的:(LeetCode练习题,leetcode,算法,数据结构)