leetcode每日一练-第53题-最大子数组和

一、思路

动态规划

二、解题方法

使用了两个变量 maxSumcurrentSum 来分别记录全局的最大和和当前连续子数组的和。遍历数组时,我们不断更新 currentSum,并比较是否需要更新 maxSum。最后,maxSum 就是最大的连续子数组和。

三、code

复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
    int n=nums.size();
    if(n==0)
    {
        return 0;
    }

    int maxSum=nums[0];// 初始化最大和为第一个元素
    int currSum=nums[0];// 当前连续子数组的和
    for(int i=1;i<n;++i)
    {
        // 对于每个元素,判断是继续扩展当前子数组,还是从当前元素重新开始一个子数组
        currSum=std::max(nums[i],currSum+nums[i]);
        // 更新最大和
        maxSum=std::max(maxSum,currSum);
    }
    return maxSum;

    }
};

=========================================================================学到的知识:

1、currentSum = std::max(nums[i], currentSum + nums[i]);

这行代码的作用是计算当前连续子数组的和 currentSum,它有两个选择:

  1. 从当前元素 nums[i] 开始一个新的连续子数组,这是 nums[i] 的值。
  2. 将当前元素 nums[i] 添加到之前的连续子数组中,即 currentSum + nums[i]

这两个选择中,我们选择较大的那个作为当前连续子数组的和 currentSum。这是因为我们希望找到的是具有最大和的连续子数组,如果将当前元素加入之前的连续子数组后和更大,那么就继续扩展当前连续子数组;如果当前元素更大,说明开始一个新的子数组可能会更有利于获得更大的和。

总之,这行代码的作用是在每个位置 i 更新当前连续子数组的和,以便后续比较是否需要更新最大和 maxSum

相关推荐
NAGNIP14 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队15 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja20 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下20 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶20 小时前
算法 --- 字符串
算法
博笙困了20 小时前
AcWing学习——差分
c++·算法
NAGNIP20 小时前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP20 小时前
大模型微调框架之LLaMA Factory
算法
echoarts20 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客20 小时前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法