zoukankan      html  css  js  c++  java
  • 连续子数组最大和

    来源:https://leetcode.com/problems/maximum-subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
    For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
    the contiguous subarray [4,-1,2,1] has the largest sum = 6.

    遍历(时间复杂度高)

    1. 若全负,取最大元素
    2. 否则比较以每个元素作为开头(或结尾)的所有连续子数组的和

    Python

    class Solution:
        def FindGreatestSumOfSubArray(self, array):
            if max(array) < 0:
                return max(array)
            max_sum = 0
            cur_sum = 0
            for i in range(len(array)):
                cur_sum = 0
                for j in range(i, len(array)):
                    cur_sum += array[j]
                    max_sum = max(cur_sum, max_sum)
            return max_sum
    

    动态规划

    遍历一次,计算以当前元素结尾的连续子数组和的最大值:

    1. 若以前一个元素结尾的连续子数组和的最大值为正,则,以当前元素结尾的连续子数组和的最大值 = 当前元素 + 以前一个元素结尾的连续子数组和的最大值
    2. 否则,以当前元素结尾的连续子数组和的最大值 = 当前元素

    比较以当前元素结尾的连续子数组和的最大值与当前全局最大值

    Python

    class Solution:
        def FindGreatestSumOfSubArray(self, array):
            if not array:
                return 0
            max_sum, cur_sum = array[0], 0
            for item in array:
                if cur_sum <= 0:
                    cur_sum = item
                else:
                    cur_sum += item
                max_sum = max(max_sum, cur_sum)
            return max_sum
    

    Java

    class Solution {
        public int maxSubArray(int[] nums) {
            if(nums.length <= 0) {
                return 0;
            }
            int maxSum = nums[0], curSum = nums[0];
            for(int i=1; i<nums.length; i++) {
                if(curSum < 0) {
                    curSum = nums[i];
                } else {
                    curSum += nums[i];
                }
                maxSum = curSum > maxSum ? curSum : maxSum;
            }
            return maxSum;
        }
    }
    
  • 相关阅读:
    docker部署springBoot项目
    linux下查看文件内容命令
    nohup后台运行jar与关闭
    nohup优化输出nohup.out日志信息
    Go 精妙的互斥锁设计
    ts找不到全局对象,报错:Cannot find name '__dirname
    定义vscode终端主题色
    element-ui按需引入报错Cannot find module 'babel-preset-es2015' 及多组件引入报错
    c# UWP 墨迹 手写识别
    c# yield return
  • 原文地址:https://www.cnblogs.com/renzongxian/p/7472124.html
Copyright © 2011-2022 走看看