中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

劍指offer:連續子數組的最大和

發布時間:2020-08-02 15:36:24 來源:網絡 閱讀:202 作者:Jayce_SYSU 欄目:編程語言

題目描述
HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會后,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,并期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和為8(從第0個開始,到第3個為止)。給一個數組,返回它的最大連續子序列的和,你會不會被他忽悠住?(子向量的長度至少是1)

# -*- coding: utf-8 -*-
# @Time         : 2019-07-09 15:45
# @Author       : Jayce Wong
# @ProjectName  : job
# @FileName     : findGreatestSumofSubArray.py
# @Blog         : https://blog.51cto.com/jayce1111
# @Github       : https://github.com/SysuJayce

class Solution:
    """
    求連續子數組的最大和,其實就是說從給定數組中選擇一個子數組,使得子數組的和最大。

    解法0:
    最樸素的解法,就是遍歷所有可能的子數組,然后找到和最大的子數組。共有(1+n)n/2個子數組,然后求
    和的復雜度為O(n),也就是這種解法的時間復雜度約為O(n^3)

    解法1:
    維護兩個變量,分別記錄當前和、最大和,如果當前和大于最大和,那么更新最大和。

    遍歷整個數組,如果加上上一個元素后當前和為負數,那么當前元素不能再與前面元素連起來,
    因為任何數加負數只會更小。所以當前元素需要作為新的子數組的起點,置當前和為當前元素的值

    解法2:
    動態規劃。
    dp[i]表示以array中第i個元素為結尾的子數組的最大和
    dp[i] = array[i],當i=0或dp[i-1]<0
    dp[i] = array[i] + dp[i-1],當dp[i-1]>=0
    """
    def FindGreatestSumOfSubArray1(self, array):
        if not array:
            raise TypeError("Invalid input")

        curSum = 0
        greatestSum = -float('inf')
        for num in array:
            if curSum <= 0:
                curSum = num
            else:
                curSum += num
            greatestSum = max(curSum, greatestSum)

        return greatestSum

    def FindGreatestSumOfSubArray(self, array):
        if not array:
            raise TypeError("Invalid input")

        dp = [array[0]] * len(array)
        for i in range(1, len(array)):
            if dp[i - 1] < 0:
                dp[i] = array[i]
            else:
                dp[i] = array[i] + dp[i - 1]
        return max(dp)

def main():
    solution = Solution()
    nums = [6, -3, -2, 7, -15, 1, 2, 2]
    print(solution.FindGreatestSumOfSubArray(nums))

if __name__ == '__main__':
    main()
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

喜德县| 鄯善县| 武城县| 中超| 施甸县| 越西县| 衢州市| 临漳县| 鸡泽县| 咸宁市| 青河县| 崇仁县| 通海县| 彰化县| 汉寿县| 衡山县| 新河县| 交城县| 和林格尔县| 疏附县| 漾濞| 张家口市| 辽中县| 枣强县| 周至县| 江油市| 修文县| 博爱县| 石首市| 武夷山市| 武川县| 策勒县| 邵阳县| 孝义市| 古蔺县| 敦化市| 哈尔滨市| 台北县| 建宁县| 唐海县| 东乡县|