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

【贪心算法题记录】53. 最大子数组和

题目链接

题目描述

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

题目分析

这道题我一开始想的是用双指针实现(实际上也是贪心的本质)。因为负数可能会对整个子数组具有负贡献,所以我们每次在sum中加入一个数nums[i]之后都要进行比较,如果sum甚至比nums[i]还要小的话,说明还不如直接从nums[i]开始记录。所以我的代码是:

class Solution {
public:int maxSubArray(vector<int>& nums) {// 连续的最大和子数组,滑动窗口也许可以一试int i = 0;  // i指向滑动窗口首端int sum = nums[i];  // 记录子数组的和int max_sum = sum;  // 记录最大和int j = i+1;    // j指向滑动窗口末尾while(j < nums.size()) {if(nums[j] + sum < nums[j]) {   // 如果加入nums[j]是负贡献i = j;  // 则重置滑动窗口首端进行记录j = i + 1;sum = nums[i];}else sum += nums[j++];  // 正贡献if(sum > max_sum) max_sum = sum;}return max_sum;}
};

上面的代码一开始判断负贡献那里我写的是nums[j] + sum < 0,但实际上也没有考虑完全,这只是负贡献的一种。

不过实际上用不着双指针,只用一个isum就能完成:

class Solution {
public:int maxSubArray(vector<int>& nums) {int result = INT32_MIN;int count = 0;for (int i = 0; i < nums.size(); i++) {count += nums[i];if (count > result) { // 取区间累计的最大值(相当于不断确定最大子序终止位置)result = count;}if (count <= 0) count = 0; // 相当于重置最大子序起始位置,因为遇到负数一定是拉低总和}return result;}
};

相关文章:

  • 天洑国产工业软件2024R1版本产品发布会顺利举办
  • Dynamics 365:安全的客户参与应用程序
  • HR人才测评,如何做中层管理人员的素质测评?
  • 数据库设计:实体关系图
  • 速盾:怎么查询cdn真实ip?
  • Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919)
  • spring自动配置
  • 智能台灯系统之PWM调光的优缺点
  • 销量逆袭!敦煌店铺如何靠自养号测评轻松引爆市场?
  • ROS for LabVIEW:实现LabVIEW与ROS的无缝集成
  • 探索 Ollama: 你的本地 AI 助手
  • Unreal Engine游戏引擎小白入门指南
  • 构建坚不可摧的Web安全防线:深入剖析二阶注入与全面防御策略
  • 基础—SQL—DML(数据操作语言)插入数据
  • ffmpeg在特定时间点插入素材
  • Apache的基本使用
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • echarts花样作死的坑
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • NSTimer学习笔记
  • PHP的类修饰符与访问修饰符
  • python_bomb----数据类型总结
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue全家桶实现一个Web App
  • 分享一份非常强势的Android面试题
  • 如何解决微信端直接跳WAP端
  • 使用common-codec进行md5加密
  • 鱼骨图 - 如何绘制?
  • 正则表达式
  • 阿里云移动端播放器高级功能介绍
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (0)Nginx 功能特性
  • (14)Hive调优——合并小文件
  • (175)FPGA门控时钟技术
  • (2020)Java后端开发----(面试题和笔试题)
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (过滤器)Filter和(监听器)listener
  • (接口封装)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十八)三元表达式和列表解析
  • (转载)(官方)UE4--图像编程----着色器开发
  • ***利用Ms05002溢出找“肉鸡
  • .NET Core WebAPI中封装Swagger配置
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET单元测试
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .net快速开发框架源码分享
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net语言中的StringBuilder:入门到精通
  • /etc/fstab 只读无法修改的解决办法
  • /proc/stat文件详解(翻译)
  • @Transactional类内部访问失效原因详解
  • [.NET]桃源网络硬盘 v7.4