当前位置: 首页 > news >正文

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

 

http://www.lryc.cn/news/155607.html

相关文章:

  • 京东云接入【风险识别】接口
  • 在 linux 虚拟机上安装配置 hive
  • 作品集(陆续上传中)
  • 论文解读 | 三维点云深度学习的综述
  • 基于costas环的载波同步系统matlab性能仿真
  • 解码自我注意的魔力:深入了解其直觉和机制
  • mysql之存储引擎
  • 服务器日志出现大量NTLM(NT LAN Manager)攻击
  • Spring学习|Spring简介、IOC控制反转理解、IOC创建对象方式
  • DDR2 IP核调式记录2
  • 【ES6】js 中class的extends、super关键字用法和避坑点
  • mysql排名函数row_number()over(order by)和with * as 的用法
  • linux局域网IP地址冲突检测
  • 远距离WiFi模组方案,实现移动设备之间高效通信,无人机远程图传应用
  • Docker构建Springboot项目,并发布测试
  • flutter架构全面解析
  • QHttpServer
  • 21.3 CSS 背景属性
  • Ansible 常用命令50条
  • ceph源码阅读 erasure-code
  • C++ 之 命名空间
  • MyBatis关系映射
  • DVWA失效的访问控制
  • docker 笔记2 Docker镜像和数据卷
  • java springboot 时间格式序列化 UTC8
  • 攻防世界-Get-the-key.txt
  • MyBatisPlus之DQL编程控制
  • 本地使用GFPGAN进行图像人脸修复
  • Linux--进程概念
  • dex2oat编译模式、触发场景、命令强制执行