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

Leetcode——53. 最大子数组和

遇到连续子数组和问题,可以试着从前缀和入手。求出前缀和后,发现其实就是每个位置的前缀和减去之前前缀和的最小值,最后得到差的最大值即可。

class Solution {
public:int maxSubArray(vector<int>& nums) {int sum = 0;int minSum = 0;int ans = INT_MIN;for(int x : nums){sum += x;ans = max(ans, sum - minSum);minSum = min(minSum, sum);}return ans;}
};

不过,在此基础上也可以观察到,该问题是可以分解为小范围的子问题。从第一个数字入手,没添加一个新数字,最大连续子数组的和要么连上该数字,要么就以该数字为新的起点。所以动态规划代码如下:

class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size();vector<int> dp(n, -1);dp[0] = nums[0];int ans = dp[0];for(int i = 1; i < n; i++){dp[i] = max(dp[i - 1] + nums[i], nums[i]);// 或// dp[i] = max(dp[i - 1], 0) + nums[0];ans = max(ans, dp[i]);}// 注, 答案不是dp[n - 1]// 而是整个dp数组的最大值return ans;}
};

空间优化:

class Solution {
public:int maxSubArray(vector<int>& nums) {int n = nums.size();//vector<int> dp(n, -1);//dp[0] = nums[0];int f = nums[0];int ans = f;for(int i = 1; i < n; i++){//dp[i] = max(dp[i - 1] + nums[i], nums[i]);f = max(f, 0) + nums[i];// 或// dp[i] = max(dp[i - 1], 0) + nums[i];ans = max(ans, f);}// 注, 答案不是dp[n - 1]// 而是整个dp数组的最大值return ans;}
};

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

相关文章:

  • elementui中rules的validator 用法
  • 在线教程丨全球首个 MoE 视频生成模型!阿里 Wan2.2 开源,消费级显卡也能跑出电影级 AI 视频
  • Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序
  • 网站建设服务器从入门到上手
  • 《n8n基础教学》第一节:如何使用编辑器UI界面
  • 如何优雅删除Docker镜像和容器(保姆级别)
  • 服务器地域选择指南:深度分析北京/上海/广州节点对网站速度的影响
  • FreeSWITCH与Java交互实战:从EslEvent解析到Spring Boot生态整合的全指南
  • 分布式弹幕系统设计
  • Git 误删分支怎么恢复
  • ABP VNext + Dapr Workflows:轻量级分布式工作流
  • stl的MATLAB读取与显示
  • Blender 4.5 安装指南:快速配置中文版,适用于Win/mac/Linux系统
  • 【Mysql】字段隐式转换对where条件和join关联条件的影响
  • 安全专家发现利用多层跳转技术窃取Microsoft 365登录凭证的新型钓鱼攻击
  • 基于Pipeline架构的光存储读取程序 Qt版本
  • 九、Maven入门学习记录
  • 学习游戏制作记录(各种水晶能力以及多晶体)8.1
  • k8s之NDS解析到Ingress服务暴露
  • Wisdom SSH开启高效管理服务器的大门
  • Git之远程仓库
  • 【全网首个公开VMware vCenter 靶场环境】 Vulntarget-o 正式上线
  • Linux(15)——进程间通信
  • VMware 下 Ubuntu 操作系统下载与安装指南
  • 用 TensorFlow 1.x 快速找出两幅图的差异 —— 完整实战与逐行解析 -Python程序图片找不同
  • Ubuntu-Server-24.04-LTS版本操作系统如何关闭自动更新,并移除不必要的内核
  • 使用 Vive Tracker 替代 T265 实现位姿获取(基于 Ubuntu + SteamVR)
  • 【云计算】云主机的亲和性策略(二):集群节点组
  • 如何理解推理模型
  • 渗透作业3