zoukankan      html  css  js  c++  java
  • [LeetCode] 53. 最大子序和

    题目链接 : https://leetcode-cn.com/problems/maximum-subarray/

    题目描述:

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

    示例:

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

    思路:

    思路一:动态规划

    当前面的总和是负数的,加上去一定会使总和减小,不如从自己重新开始.

    例如,[-2,1,-3,4]

    1就不需要加前面-2,自己可以重新开始.

    思路二:

    sum(i,j) = sum(0,j) - sum(0,i)

    我们只要记录前i总和最小值就可以了!

    上面时间复杂度都是:(O(n))


    关注我的知乎专栏,了解更多解题技巧,大家共同进步!

    代码:

    思路一:

    python

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            n = len(nums)
            dp = [0] * n
            dp[0] = nums[0]
            res = nums[0]
            for i in range(1, n):
                dp[i] = max(dp[i-1] + nums[i], nums[i])
                res = max(dp[i], res)
            return res
    

    java

    class Solution {
        public int maxSubArray(int[] nums) {
            int[] dp = new int[nums.length];
            dp[0] = nums[0];
            int res = nums[0];
            for (int i = 1; i < nums.length; i++) {
                dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);
                res = Math.max(res, dp[i]);
            }
            return res;  
        }
    }
    

    思路二:

    python

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            cur_sum = 0
            min_sum = 0
            res = float("-inf")
            for num in nums:
                cur_sum += num
                res = max(res, cur_sum - min_sum)
                min_sum = min(min_sum, cur_sum)
            return res
    

    java

    class Solution {
        public int maxSubArray(int[] nums) {
            int all_sum = 0;
            int min_sum = 0;
            int res = Integer.MIN_VALUE;
            for (int num : nums) {
                all_sum += num;
                res = Math.max(res, all_sum - min_sum);
                min_sum = Math.min(min_sum, all_sum);
            }
            return res;   
        }
    }
    
  • 相关阅读:
    java&nbsp;split
    百度知道
    2014年10月27日
    2014年10月27日
    mybatis批量update,返回行数为-1
    mybatis批量插入:oracle和mysql的区别
    oracle数据库,mybatis批量insert,缺失values字段
    java后台接收json数据,报错com.alibaba.fastjson.JSONObject cannot be cast to xxx
    C++——运算符重载(上)
    C++——友元
  • 原文地址:https://www.cnblogs.com/powercai/p/10886298.html
Copyright © 2011-2022 走看看