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;
        }
    }
    
  • 相关阅读:
    H5+CSS3知识点
    三维立体
    HTML5的Audio标签打造WEB音频播放器
    video.js-H5视频播放库
    js事件(Event)知识整理
    高端大气上档次的fullPage.js
    javascript的正则表达式学习
    轮播图—运动框架来实现(拥有透明度效果)
    Android FM模块学习之四源码分析(3)
    Android FM模块学习之四源码学习(2)
  • 原文地址:https://www.cnblogs.com/renzongxian/p/7472124.html
Copyright © 2011-2022 走看看