前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-面试题42-连续子数组的最大和

LeetCode-面试题42-连续子数组的最大和

作者头像
benym
发布2022-07-14 15:17:18
1700
发布2022-07-14 15:17:18
举报
文章被收录于专栏:后端知识体系后端知识体系

# LeetCode-面试题42-连续子数组的最大和

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

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

示例1:

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

限制:

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100

# 解题思路

方法1、找规律:

  • 当累和小于等于0时,则curSum从当前数开始,如果不小于0就开始累加
  • 如果当前和大于最大的和,就把curSum的值给maxSum

方法2、动态规划:

  • dp[i] = dp[i-1] + nums[i] # if i != 0 and dp[i-1] > 0
  • dp[i] = nums[i] # if i == 0 or dp[i-1] < 0

公式的意义在于,当第i-1个数字结尾的子数组中 所有数字的和小于0时,如果把这个负数与第i个数累加,则得到的结果比第i个数字本身还要小,所以这个情况下第i个数字结尾的子数组就是第i个数字本身。

如果i-1个数字结尾的子数组中所有数字的和大于0,则与第i个数字累加就得到以第i个数字结尾的子数组中所有数字的和

在这里因为dp[i]只与dp[i-1]和nums[i]有关系,因此可以将原数组nums用做dp列表,即直接在nums上修改

# Java代码

代码语言:javascript
复制
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length==0||nums==null)
            return 0;
        int maxSum = Integer.MIN_VALUE;
        int curSum = 0;
        for(int i = 0;i< nums.length;i++){
            if(curSum<=0)
                curSum = nums[i];
            else
                curSum+=nums[i];
            if(curSum>maxSum){
                maxSum = curSum;
            }
        }
        return maxSum;
    }
}

# Python代码

代码语言:javascript
复制
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if not nums or len(nums)==0: return 0
        maxSum = nums[0]
        for i in range(1,len(nums)):
            if nums[i-1]>0:
                nums[i]+=nums[i-1]
            maxSum = max(maxSum,nums[i])
        return maxSum
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # LeetCode-面试题42-连续子数组的最大和
    • # 解题思路
      • # Java代码
        • # Python代码
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档