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(numsi, currentSum + numsi);

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

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

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

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

相关推荐
roman_日积跬步-终至千里11 分钟前
【算法五】从斐波那契到动态规划:自顶向下、自底向上与状态压缩
算法·动态规划
wuyk55528 分钟前
9.冒泡排序:像鱼缸泡泡一样的简单排序算法
开发语言·stm32·单片机·算法·排序算法
无限码力2 小时前
8.26华为OD机试真题 新系统【字符串回文判断】
算法·华为od·华为od机考·华为od机试·华为od上机考试真题·华为od最新机试真题题解·华为od机试真题题库
玖玥拾4 小时前
LeetCode 125 验证回文串
算法·leetcode
Asize11 小时前
146. LRU 缓存
算法
Asize11 小时前
543. 二叉树的直径
算法
lemon_sjdk11 小时前
ObjectProperty
java·开发语言·算法
Zentceh12 小时前
AI-ISP在夜视机芯中的应用:从传统ISP到PixelClean全彩夜视的进化
人工智能·科技·算法·计算机视觉·车载系统·视频·智能硬件
xier_ran12 小时前
【infra之路】AWQ 详解:激活感知权重保护,让 W4A16 量化精度超越 GPTQ
线性代数·算法·机器学习·量化·infra
亦皓ai12 小时前
AI时代后端工程(二):AI把代码写得越来越快,我却越来越不敢让它直接开工了
人工智能·算法·机器学习·搜索引擎·transformer