zoukankan      html  css  js  c++  java
  • 53.Maximum Subarray

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            n = len(nums)
            res = float('-inf')
            tmp = 0
            for i in range(n):
                if tmp < 0:
                    tmp = 0
                tmp = tmp + nums[i]
                res = max(tmp, res)
            return res
            

    Java 版:

      • 动态规划,时间复制度 O(n);
      • 因为正数 preSum 与 X 相加,才会大于 X,相当于正反馈,则累加 X,继续滚雪球;
      • 否则,负数与 X 相加,负反馈,相加后比 X 本身的值还要小,则重新开始累加;

    class Solution {
        public int maxSubArray(int[] nums) {
            int preSum = nums[0], res = preSum; // preSum为前面最大子序列的和
            for(int i = 1; i < nums.length; i++){
                if(preSum < 0) preSum = nums[i]; //前面最大的和小于 0,则重新开始累加
                else preSum += nums[i]; //否则,继续保持累加
                res = preSum > res ? preSum : res; //每一次都要比较最大的结果
            }
            return res;
        }
    }
  • 相关阅读:
    写日志
    读写excel
    python安装模块
    数据库
    日志和关键字查找
    时间戳
    os 模块
    图-最小生成树算法之Kruskal及其Java实现
    图-图的表示、搜索算法及其Java实现
    前端实现list排序
  • 原文地址:https://www.cnblogs.com/luo-c/p/12857203.html
Copyright © 2011-2022 走看看