首页 > 其他分享 >LeetCode 53. 最大子数组和

LeetCode 53. 最大子数组和

时间:2023-09-25 17:06:28浏览次数:47  
标签:最大 nums int 53 我们 数组 LeetCode dp


最大子数组和(medium)

题目链接:

53. 最大子数组和

题目描述:

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

示例 1:

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

示例 2:

输入:nums = [1] 输出:1

示例 3:

输入:nums = [5,4,-1,7,8] 输出:23

题目解析

解释一下什么是子数组.很简单,我们把数组里面的元素连接一起就可以认为是一个子数组.题目就是求我们子数组的最大和.这里我们用实例3三做演示.

LeetCode 53. 最大子数组和_职场和发展

也就是要求的数组里面的最大连续子数组的和.

算法原理

状态表示

按照经验,我们以...为结尾表示状态.

dp[i]:表示以i位置为结尾,我们最大子数组最大的连续和.

状态转移方程

这里我们想一下.对于我们的nums[i].这里我们可以有两个选择.

  • 选择nums[i]这一个元素作为我们的子数组 dp[i] = nums[i]
  • 和i-1联合作为子数组. dp[i] = dp[i-1]+nums[i]

那么这里我们求最大值.dp[i] = max(nums[i], dp[i-1]+nums[i]);

初始化

借助了i-1位置,那么此时我们多加上一个节点.那么求第一个元素,我们dp[1]一定是第一个元素,那么dp[0] = 0就可以满足这个了.

填表顺序

从左向由填.

返回值

题目要求的最大和,那么我们这里使用一个变量保存最大就可以了.

编写代码

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        if(nums.empty())
        return -1;
        int n = nums.size();
        vector<int> dp(n+1, 0);
        int result = INT_MIN;
        for(int i = 1; i <= n; i++)
        {
            dp[i] = max(dp[i-1] + nums[i-1], nums[i-1]);
            result = max(result, dp[i]);
        }   
        return result;
    }
};

LeetCode 53. 最大子数组和_动态规划_02

标签:最大,nums,int,53,我们,数组,LeetCode,dp
From: https://blog.51cto.com/byte/7597255

相关文章

  • leetcode21. 合并两个有序链表
    合并两个有序链表题目链接21.合并两个有序链表将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0......
  • C语言统计数组里面各个元素出现的次数
    #include<iostream>#include<stdio.h>intmain(){intnums[]={1,1,2,2,3,4,5,6,6};intsize=sizeof(nums)/sizeof(nums[0]);//创建一个全0的空数组int*counterNums=(int*)calloc(size,sizeof(int));for(inti=......
  • Java数组
    Arrayjava语言中数组是一种引用数据类型。不属于基本数据类型。数组的父类是object。数组是一个容器,数组是一个数据的集合。数组中可以储存基本数据类型的数据,也可以储存引用数据类型的数据。数组是引用类型,所以数组对象储存在堆内存当中的。数组当中储存的是Java对象的话,实......
  • 数组1
    数组声明创建首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法: dataType[]arrayRefVar; //首选的方法dataTypearrayRefVar[];//效果相同,但不是首选方法 array/əˈreɪ/n.一系列,大量;数组,阵列;盛装 data/ˈdeɪtə/n.数据,资料typ......
  • 数组
    数组声明创建首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的语法:dataType[]arrayRefVar;//首选的方法dataTypearrayRefVar[];//效果相同,但不是首选方法array/əˈreɪ/n.一系列,大量;数组,阵列;盛装data/ˈdeɪtə/n.数据,资料type/......
  • 全局数组未加锁访问溢出导致才内存
    在客户那里发现有些数据包被错误的转到了standbySMM上,后面查看proc发现是knet.ko中的role字段被踩后面再检查发现有三个字段都被踩:zyc@fishsmm_arm64(/≧▽≦)/~/do_not_remove/aarch64-marvell-linux-gnu-nmlinux-casa-knet.ko|grepsmm_role0000000006925110B......
  • [LeetCode] 1353. Maximum Number of Events That Can Be Attended 最多可以参加的会
    Youaregivenanarrayof events where events[i]=[startDayi,endDayi].Everyevent i startsat startDayi andendsat endDayi.Youcanattendanevent i atanyday d where startTimei<=d<=endTimei.Youcanonlyattendoneeventatanytime ......
  • Jenkins 命令执行 -- jetty 敏感信息泄露 --(CVE-2021-2816)&&(CVE-2017-1000353)&&(C
    Jenkins命令执行--jetty敏感信息泄露--(CVE-2021-2816)&&(CVE-2017-1000353)&&(CVE-2018-1000861)jetty敏感信息泄露(CVE-2021-28169)漏洞简介对于<=9.4.40、<=10.0.2、<=11.0.2的EclipseJetty版本,对带有双重编码路径的ConcatServlet的请求可以访问WEB-INF目录......
  • PostgreSQL教程:数组类型
    数组还是要依赖其他类型,比如在设置住址,住址可能有多个住址,可以采用数组类型去修饰字符串。PGSQL中,指定数组的方式就是[],可以指定一维数组,也支持二维甚至更多维数组。构建数组的方式:droptabletest;createtabletest(idserial,col1int[],col2int[2],col3......
  • #yyds干货盘点# LeetCode程序员面试金典:除自身以外数组的乘积
    题目:给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32位 整数范围内。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。 示......