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

一、思路

动态规划

二、解题方法

使用了两个变量 maxSum 和 currentSum 来分别记录全局的最大和和当前连续子数组的和。遍历数组时,我们不断更新 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。

相关推荐
禾小西2 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
小蒋观天下2 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J2 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛2 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有3 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111113 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS3 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b3 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人3 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全
chenbingjie_c4 小时前
C++ STL 适配器:stack & queue,从 vector/list 到 deque 深度解析
数据结构·c++