(动态规划) 剑指 Offer 42. 连续子数组的最大和 ——【Leetcode每日一题】

news2024/12/29 10:10:48

❓ 剑指 Offer 42. 连续子数组的最大和

难度:简单

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为 O(n)

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

提示

  • 1 < = a r r . l e n g t h < = 1 0 5 1 <= arr.length <= 10^5 1<=arr.length<=105
  • $-100 <= arr[i] <= 100

注意:本题与 53. 最大子数组和 相同。

💡思路:动态规划

定义 dp 数组, dp[i]代表以元素 nums[i] 为结尾的连续子数组最大和。

  • dp[i−1] < 0 ,说明 dp[i−1]dp[i] 产生负贡献,即 dp[i−1]+nums[i] 还不如 nums[i] 本身大。
    • dp[i−1]>=0 时,执行:
      d p [ i ] = d p [ i − 1 ] + n u m s [ i ] dp[i]=dp[i−1]+nums[i] dp[i]=dp[i1]+nums[i]
    • dp[i−1]<0 时,执行 :
      d p [ i ] = n u m s [ i ] dp[i]=nums[i] dp[i]=nums[i]
  • 初始状态: dp[0]=nums[0],即以 nums[0] 结尾的连续子数组最大和为nums[0]

优化

  • 观察发现 dp[i] 只与 dp[i−1]nums[i] 有关系,因此可以第一个变量 sum 存储 dp[i] 的值,即存储以元素 nums[i] 为结尾的连续子数组最大和。
  • 由于省去 dp 列表使用的额外空间,因此空间复杂度从 O ( n ) O(n) O(n) 降至 O ( 1 ) O(1) O(1)

🍁代码:(C++、Java)

C++

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ans = nums[0];
        int sum = 0;
        for(int num : nums){
            sum = sum < 0 ? num : sum + num;
            ans = max(ans, sum);
        }
        return ans;
    }
};

Java

class Solution {
    public int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for(int num : nums){
            sum = sum < 0 ? num : sum + num;
            ans = Math.max(ans, sum);
        }
        return ans;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组 nums 的长度,我们只需要遍历一遍数组即可求得答案。
  • 空间复杂度 O ( 1 ) O(1) O(1),我们只需要常数空间存放若干变量。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wazuh环境配置以及案例复现

目录 wazuh环境配置wazuh案例复现 wazuh环境配置 一、wazuh配置 1.1进入官网下载OVA启动软件 Virtual Machine (OVA) - Installation alternatives (wazuh.com) 1.2点击启动部署&#xff0c;傻瓜式操作 1.3通过账号&#xff1a;wazuh-user&#xff0c;密码&#xff1a;wazuh进…

机器视觉工程师,一个踏实喜欢加班,一个技术强挑活,老板怎么选

我们机器视觉工程师对于公司来说&#xff0c;降低成本&#xff0c;带来利润。所以在公司人才选拔上非常重要。 各有各的用处&#xff0c;踏实的可以用作后卫把容错率最小最重要的活给他在幕后&#xff1b;把出头沟通横向和门面出彩的活给后面那个。 同时要让他俩都知道自己在团…

记录protocol buffers Mac安装

使用brew安装最新的protobuf 在Mac 上安装&#xff0c;使用brew 可以安装最新的protobuf。这个也比较简单&#xff0c;简单说一下。 首先先检查一下是否安装了brew。如果没有安装brew的话&#xff0c;请先安装brew.可以通过brew --version来检查 使用brew install protobuf 来…

Kali 网络参数的配置

手工方式 Wired 有线 Woreless 无线 图形化的网络管理器&#xff08;依赖的服务&#xff1a;NetworkManager&#xff09; ┌──(root㉿kali)-[~] └─# systemctl status NetworkManager ● NetworkManager.service - Network ManagerLoaded: loaded (/lib/systemd/system/N…

AirPods Max 耳机被曝耳罩凝结水,引集体诉讼,“智商税”产品?

近日&#xff0c;一些用户反映称苹果公司的旗舰耳机AirPods Max存在严重问题。据用户表示&#xff0c;耳机可能会因为汗水或佩戴时间过长而产生凝结水&#xff0c;导致故障甚至报废。这一问题不仅在社交媒体平台上引起了广泛关注和讨论&#xff0c;甚至引发了一场集体诉讼。 据…

docker之Compose与DockerSwarm

目录 Compose 简介 概念 为什么需要&#xff1f; 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…

肘部法则和轮廓系数(用于确定簇类数目)

知识储备 无监督聚类缺点 聚类不同于其他常见机器学习有监督方法&#xff0c;聚类为一种无监督学习方法&#xff0c;原理为随机选取K个质心&#xff08;K为确定聚类的数目&#xff09;&#xff0c;计算距离质心最近的样本点&#xff0c;不断迭代更新质心。不断地将样本点划分…

Vue 项目布署后,刷新页面(或跳转页面)出现 404 解决办法

Vue 项目布署后&#xff0c;刷新页面&#xff08;或跳转页面&#xff09;出现 404 问题背景为什么会出现404解决办法&#xff08;两种&#xff09;方法一&#xff1a;改变服务器配置方法二&#xff1a;改变路由模式 单页应用(SPA)概念 问题背景 今天重新部署一个vue项目的时候…

途牛科技与火山引擎数智平台合作 打造企业大数据系统“降本”新范式

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;南京途牛科技有限公司与火山引擎数智平台&#xff08;VeDI&#xff09;的合作获得新进展&#xff1a;途牛大数据系统全面迁移至火山引擎开源大数据…

vue页面转pdf后分页时文字被横向割裂

效果 预期效果 //避免分页被截断async outPutPdfFn (id, title) {const _t this;const A4_WIDTH 592.28;const A4_HEIGHT 841.89;// dom的id。let target document.getElementById(pdf);let pageHeight target.scrollWidth / A4_WIDTH * A4_HEIGHT;// 获取分割dom&#xf…

Spring Boot 整合MyBatis(超详细)

&#x1f600;前言 本篇博文关于Spring Boot 整合MyBatis&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x…

wazuh初次理解-8-23

一、wazuh配置&#xff1a; 1、进入官网下载OVA启动软件&#xff1a; Virtual Machine (OVA) - Installation alternatives 2、进入虚拟机进行配置&#xff1a; 3、登录提示&#xff1a; 4、将网络连接模式更改为NAT&#xff0c;否则不能上网&#xff1b; 4、重启网络&#…

Rabbitmq配置调优

1、参数调优 queue_index_embed_msgs_below&#xff1a; 控制消息的存储位置。是独立存储到msg_store中&#xff0c;还是嵌入消息的索引一并存储。默认值是4096&#xff08;字节&#xff09;&#xff0c;即小于4KB的消息会嵌入到消息索引中一并存储。**注&#xff1a;**4KB包括…

电气器件系列四十二:线性直流稳压电源

线性稳压电源是比较早使用的一类直流稳压电源。根据调整管的工作状态&#xff0c;我们常把稳压电源分成两类&#xff1a;线性稳压电源和开关稳压电源。线性稳压直流电源的特点是&#xff1a;输出电压比输入电压低&#xff1b;反应速度快&#xff0c;输出纹波较小&#xff1b;工…

ast在python架构中的使用

AST学习 AST简介&#xff1a; AST(Abstract syntac tree)是编译原理中的概念&#xff0c;是对源代码语法结构的一种抽象表示&#xff0c;它以树的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构。 下面的代码展示了以demo.py中的ast语法&…

实景无人直播小白如何操作?抖音/直播带货/实况

在当今数字娱乐领域实景无人直播系统成为了一种备受关注的娱乐方式。这种系统能够将真实场景以实时视频的形式传输到用户终端&#xff0c;让用户可以身临其境地观赏各种精彩的场景。本文将深入探讨实景无人直播系统的操作指南&#xff0c;旨在为读者提供专业性、思考深度和逻辑…

简单版的数组实现哈希表

package com.wei.mybatisflex;import java.util.ArrayList; import java.util.List;/*** 用数组实现哈希表*/ public class ArrayToHash {/*** 键值对定义*/class Pair{private int key;private String val;public Pair(int key, String val) {this.key key;this.val val;}}p…

java八股文面试[数据结构]——HashMap和HashTable区别

HashMap源码中的重要常量 DEFAULT_INITIAL_CAPACITY: HashMap的默认容量&#xff0c;16 MAXIMUM_CAPACITY&#xff1a; HashMap的最大支持容量&#xff0c;2^30 TREEIFY_THRESHOLD&#xff1a;Bucket中链表长度大于该默认值&#xff0c;转化为红黑树。 UNTREEIFY_THRESHOLD…

无涯教程-PHP - 返回类型声明

在PHP 7中&#xff0c;引入了一个新函数返回类型声明&#xff0c;返回类型声明指定函数应返回的值的类型&#xff0c;可以声明返回类型的以下类型。 intfloatbooleanstringinterfacesarraycallable 有效返回类型 <?phpdeclare(strict_types1);function returnIntValue(i…

Java课题笔记~Element UI

Element&#xff1a;是饿了么公司前端开发团队提供的一套基于 Vue 的网站组件库&#xff0c;用于快速构建网页。 Element 提供了很多组件&#xff08;组成网页的部件&#xff09;供我们使用。例如 超链接、按钮、图片、表格等等~ 如下图左边的是我们编写页面看到的按钮&#…