【一刷《剑指Offer》】面试题 31:连续子数组的最大和

牛客对应题目链接:连续子数组最大和_牛客题霸_牛客网 (nowcoder.com)

力扣对应题目链接:53. 最大子数组和 - 力扣(LeetCode)

核心考点 :简单动归问题。

一、《剑指Offer》对应内容


二、分析题目

1、贪心

从前往后迭代,一个个数字加过去,如果 sum<res,则重新开始找子序串。


2、动态规划

  • 定义状态 dp[i]:表示以 i 下标结尾的最大连续子序列的和。
  • 状态递推:dp[i] = max(dp[i-1]+array[i], array[i]) 【 注意:这里一定要连续关键字】
  • 状态的初始化:dp[0] = array[0], max = array[0]

很明显,上面的这个做法只会使用到 dp[i] dp[i-1],所以是有优化的可能的。


三、代码

//牛客
#include <iostream>
using namespace std;

const int N=2e5+10;
int arr[N], dp[N];

int main()
{
    int n;
    cin >> n;
    for(int i=0; i<n; i++) cin >> arr[i];
    dp[0]=arr[0];
    int res=arr[0];
    for(int i=1; i<n; i++)
    {
        dp[i]=max(dp[i-1]+arr[i], arr[i]);
        res=max(res, dp[i]);
    }
    cout << res << endl;
    return 0;
}

//基于上面代码的优化
#include <iostream>
using namespace std;

const int N=2e5+10;
int arr[N];

int main()
{
    int n;
    cin >> n;
    for(int i=0; i<n; i++) cin >> arr[i];
    int sum=arr[0];
    int res=arr[0];
    for(int i=1; i<n; i++)
    {
        if(sum>=0) sum+=arr[i];
        else sum=arr[i];
        res=max(res, sum);
    }
    cout << res << endl;
    return 0;
}
//力扣
//方法一
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res=-2e4;
        int sum=0;
        for(int i=0; i<nums.size(); i++)
        {
            sum+=nums[i];
            if(sum>res)
                res=sum;
            if(sum<0)
                sum=0;
        }
        return res;
    }
};

//方法二(与上面牛客的写法不太一样)
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n=nums.size();
        vector<int> dp(n+1);
        int res=-2e4;
        for(int i=1; i<=n; i++)
        {
            dp[i]=max(nums[i-1], dp[i-1]+nums[i-1]);
            if(dp[i]>res) res=dp[i];
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VRTK4教程 一:资源导入、Unity设置、连接头盔

文章目录 VRTK4的分包导入VRTK4的资源包unity设置连接头盔 VRTK4的分包 vrtk4的资源包和旧版不同&#xff0c;采用了分包导入的思想&#xff0c;我们要用什么功能&#xff0c;就导入什么包&#xff0c;可以有效减小程序体积 如下图&#xff0c;已经导入的vrtk包会显示在Packag…

C语言—深入理解指针(5)

1. sizeof 和 strlen 的对比 1.1 sizeof 在学习操作符的时候&#xff0c;我们学习了 sizeof&#xff0c;sizeof 是计算变量所占内存空间大小的&#xff0c;单位是字节&#xff0c;如果操作数是类型的话&#xff0c;计算的是使用类型创建的变量所占内存空间的大小。 sizeof 只…

MicroBlaze 处理器参考指南

概述 本章包含MicroBlaze功能的概述和详细信息MicroBlaze架构包括Big-Endian或Little-Endian位反转格式&#xff0c;32位或64位通用寄存器&#xff0c;虚拟内存管理&#xff0c;缓存软件支持&#xff0c;和AXI4-Stream接口 简介 MicroBlaze嵌入式处理器软核是一个精简指令集…

调查问卷和考试系统SurveyKing

什么是 SurveyKing &#xff1f; SurveyKing 是功能更强大的调查问卷、考试系统&#xff0c;很多功能体验超过问卷网、问卷星。支持在线考试/调查问卷/公开查询/题库刷题/投票。 软件特性 &#x1f947; 支持 20 多种题型&#xff0c;如填空、选择、下拉、级联、矩阵、分页、签…

CANDela studio的DTC

可以在文件——属性里面选择支持的规范 想要添加DTC&#xff0c;首先要在Diagnostic Trouble Codes里面的Available DTCs Fault Memory里面进行添加&#xff0c;不过这只是添加在池子里面&#xff0c;并不能使用。 添加完了之后在fault memory里面copy进来&#xff0c; 这样就能…

VRRP

文章目录 VRRP基本原理技术背景VRRP作用VRRP概述VRRP名词解释VRRP路由器VRRP组虚拟路由器虚拟IP地址、MAC地址Master、Backup路由器 VRRP状态机Master/ Backup 路由器Master路由器:Backup路由器: VRRP的工作过程 VRRP基础配置![image.png](https://img-blog.csdnimg.cn/img_con…

【逻辑回归】Logistic Regression逻辑回归模型学习笔记

文章目录 序言1. 线性回归2. 逻辑回归2.1 引入逻辑回归的原因2.2 逻辑回归2.3 逻辑回归的应用 3. 逻辑函数3.1 sigmoid函数3.2 sigmoid函数的性质3.3 决策边界3.4 对数几率 4. 损失函数4.1 为什么说逻辑回归时概率类模型4.2 为什么要进行极大似然估计4.3 利用MLE如何推导出损失…

MySQL嵌套,别名,分组查询

有以下三张表&#xff1a;分别是课程表c&#xff0c;有课程号cno&#xff0c;课程名cname&#xff0c;课程类别cpro等 学生信息表s&#xff0c;学号sno&#xff0c;姓名sname&#xff0c;性别ssex&#xff0c;年龄sage&#xff0c;班级sclass&#xff0c;籍贯jg 成绩表sc&#…

C++STL---list知识汇总

前言 学习完list&#xff0c;我们会对STL中的迭代器有进一步的认识。list底层有很多经典的东西&#xff0c;尤其是他的迭代器。而list的结构是一个带头双向循环链表。 list没有reserve和resize&#xff0c;因为它底层不是连续的空间&#xff0c;它是用时随时申请&#xff0c;…

【QT】父子按钮同时响应点击事件

QPushButton如何响应点击事件 QPushButton::event(QEvent *e) 。可以看到在QPushButton中的event函数中并没有鼠标点击相关的操作&#xff0c;那么我们去QAbstractButton::event中寻找 damn it!。依然没有那我们去QWidget::event中寻找 damn it! 只有mousePressEvent mouseR…

c++学生管理系统

想要实现的功能 1&#xff0c;可以增加学生的信息&#xff0c;包括&#xff08;姓名&#xff0c;学号,c成绩&#xff0c;高数成绩&#xff0c;英语成绩&#xff09; 2&#xff0c;可以删除学生信息 3&#xff0c;修改学生信息 4&#xff0c;显示所有学生信息 5&#xff0c…

python中利用cartopy库绘制SST图像

1. Cartopy简介 Cartopy 是一个开源的 Python 库&#xff0c;用于绘制地图和地理数据分析。它结合了 matplotlib 的绘图功能和 shapely、pyproj 等库的地理空间数据处理能力&#xff0c;为用户提供了在地图上可视化数据的强大工具。 以下是 Cartopy 的一些主要特点和功能&#…

微信公众号开发(问题1):订阅号不能定时发私信/私信

微信公众号开发时&#xff0c;因为个人使用&#xff0c;申请的是订阅号&#xff0c;本来是想出了自动回复&#xff0c;再加一个定时消息的功能&#xff0c;尝试利用flask里的scheduler添加定时任务&#xff0c;但是执行之后不能收到消息&#xff0c;通过再次查看订阅号的功能&a…

stm32mp157为什么要把相同的tf-A trust烧录emmc的boot1和boot2?

在使用该处理器时&#xff0c;为什么要将相同的Trusted Firmware-A (TF-A)烧录到eMMC的Boot1和Boot2区域呢&#xff1f; 这么做的主要原因包括&#xff1a; 冗余性和可靠性&#xff1a; 将相同的TF-A烧录到两个不同的引导区域&#xff08;Boot1和Boot2&#xff09;可以增加系…

LeetCode 算法:找到字符串中所有字母异位词c++

原题链接&#x1f517;&#xff1a;找到字符串中所有字母异位词 难度&#xff1a;中等⭐️⭐️ 题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…

人工智能与【肿瘤免疫微环境】结合,探索免疫治疗的新方向|24年6月·顶刊速递·06-02

罗小罗同学说 24-06-02&#xff5c;文献速递 今天分享的文章&#xff0c;主题是——人工智能&肿瘤免疫微环境。解释一下这张图&#xff0c;左列是文献标题&#xff0c;右侧是发表的年月&#xff0c;放心&#xff0c;都是顶刊&#xff0c;不然我也不会选的。 PS&#xff1a…

大数据测试/ETL开发,如何造测试数据

相信很多的小伙伴&#xff0c;有些是大数据测试岗位&#xff0c;有些是ETL开发&#xff0c;都面临着如何要造数据的情况。 1&#xff0c;造数背景 【大数据测试岗位】&#xff0c;比较出名的就是宁波银行&#xff0c;如果你在宁波银行做大数据开发&#xff0c;对着需求开发完…

Java——常见进制

在计算机领域有四种比较常见的进制&#xff0c;分别是二进制、八进制、十进制和十六进制。 一、二进制&#xff08;Binary&#xff09; 二进制&#xff08;Binary&#xff09;是一种基数为2的数值系统&#xff0c;仅使用两个符号&#xff1a;0和1。所以它的进位规则就是逢二进…

机械革命硬盘数据恢复:深度解析与实用指南

随着科技的飞速发展&#xff0c;数据存储与备份已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;硬盘故障、误删除或格式化等意外情况时常发生&#xff0c;导致重要数据丢失&#xff0c;给用户带来极大的困扰。本文将以“机械革命硬盘数据恢复”为主题&#xff0…