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

devtools/2024/9/24 7:25:52/

题目链接

题目描述

给你一个整数数组 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;}
};

http://www.ppmy.cn/devtools/46539.html

相关文章

html 使用svg矢量图时无法 调整宽高问题解决,不能像图片一样设置宽高比例问题

引入的路径后加 #svgView(preserveAspectRatio(none)) 具体代码如下 修改前 <img src"/assets/svgs/full_screen_full.svg" class"im"> 修改后 <img src"/assets/svgs/full_screen_full.svg#svgView(preserveAspectRatio(none))" cla…

vue2中使用tinymce

vue2中使用tinymce的记录 本篇文章主要实现的功能&#xff1a; &#xff08;1&#xff09;【查看】时禁用编辑 &#xff08;2&#xff09;【编辑】时某些内容是不可编辑的 实现效果图&#xff1a; 第一个功能的主要代码 disabled属性 // 使用地地方&#xff0c;传递disabled属…

Nginx平滑升级

目录 编译安装nginx1.18 平滑升级至1.22版本 本文记录了编译安装的nginx1.18平滑升级到nginx1.22版本的流程&#xff0c;都采用的编译安装&#xff0c;有不清楚流程的可以评论区我&#xff0c;咱们一起讨论。 编译安装nginx1.18 # 安装编译依赖 yum -y install gcc pcre pc…

为什么会有websocket(由来)

一、HTTP 协议的缺点和解决方案 1、HTTP 协议的缺点和解决方案 用户在使用淘宝、京东这样的网站的时候&#xff0c;每当点击一个按钮其实就是发送一个http请求。那我们先来回顾一下http请求的请求方式。 一个完整的http请求是被分为request请求节点和response响应阶段的&…

容器项目之前后端分离

容器化部署ruoyi项目 #需要的镜像nginx、java、mysql、redis、 #导入maven镜像、Java镜像和node镜像 docker load -i java-8u111-jdk.tar docker load -i maven-3.8.8-sapmachine-11.tar docker load -i node-18.20.3-alpine3.20.tar #拉取MySQL和nginx镜像 docker pull mysql…

AI降重:如何有效降低毕业论文查重率?

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

Django中使用Celery和APScheduler实现定时任务

在之前的文章我们已经学习了Celery和APScheduler的基本使用&#xff0c;下面让我们来了解一下如何在Django中使用Celery和APScheduler Celery 1.前提工作 python 3.7 pip install celery pip install eventlet #5.0版本以下 pip install importlib-metadata4.8.3&#xff08…

JARBAS - Jenkins渗透原理详解

nmap端口扫描 主机发现 创建文件夹进行保存扫描记录 指定最低1万速率扫描所有端口 提取端口 详细扫描 脚本扫描 web渗透 脚本扫描里有robots&#xff1b;去看一下 # we dont want robots to click "build" links User-agent: * Disallow: /先目录爆破80端口 没有信…