前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >07— 最大子数组和【LeetCode 53】

07— 最大子数组和【LeetCode 53】

作者头像
吃猫的鱼Code
发布2023-07-24 18:31:21
1800
发布2023-07-24 18:31:21
举报

题目

53. 最大子数组和 - 力扣(LeetCode)

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

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

示例1:

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

示例2:

代码语言:javascript
复制
输入:nums = [1]
输出:1

示例3:

代码语言:javascript
复制
输入:nums = [5,4,-1,7,8]
输出:23

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

解题

解法一

思路

思路,通过动态规划的思路可以解决该问题。

由于题目中要求求出最大的连续的子数组,因此可以通过动态规划,来判断当前轮到的数,是否应该成为一个新的连续子数组的开头。

需要定义一个dp[i]数组,dp[i]中存储的数据:

dp[i] = max(num[i],dp[i-1]+nums[i])

辅助理解图
辅助理解图

意思就是dp[i]存储的是nums[i]是否作为一个新的开始,要是之前的数+num[i]的数还小于num[i],就表明,num[i]适合作为一个新的子数组的起始。

最后只需要从dp[]中找到最大的值,就是最大连续子数组的值。

解决
代码语言:javascript
复制
public int maxSubArray(int[] nums) {
        int length = nums.length;
        //dp数组
        int[] dp = new int[length];
        int result = Integer.MIN_VALUE;
        //初始化dp,第一个数值默认为数组第一个值
        dp[0] = nums[0];
        //遍历填充dp
        for(int i=1;i
结果
代码语言:javascript
复制
> 2023/07/15 18:17:56    
解答成功:
    执行耗时:2 ms,击败了44.11% 的Java用户
    内存消耗:56.3 MB,击败了38.07% 的Java用户
解法一优化

得出最后结果是用了时间2ms。

耗时的原因是因为用了数组存储dp,然后又需要从dp数组中进行遍历找最大值,因此消耗了较多的时间。

然后就寻思用两个变量来替代数组,因为其实我发现有用的记录变量只有两个,一个是前面的连续的最大值,一个是结果,只需要定义这两个结果,然后不断更新这两个变量,完全可以将时间复杂度更大的数组存储的方式替换掉。

代码语言:javascript
复制
class Solution {
    public int maxSubArray(int[] nums) {
        int length = nums.length;
        //刚开始默认的最大连续子集为第一个nums[0]
        int result = nums[0];
        //一开始连续的默认值为nums[0]
        int temp = nums[0];
        //遍历填充dp
        for(int i=1;i

优化结果:

代码语言:javascript
复制
> 2023/07/15 18:28:36    
解答成功:
    执行耗时:1 ms,击败了100.00% 的Java用户
    内存消耗:58.1 MB,击败了13.02% 的Java用户
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解题
    • 解法一
      • 思路
      • 解决
      • 结果
      • 解法一优化
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com