1. 程式人生 > >演算法學習-連續子陣列求和最大值

演算法學習-連續子陣列求和最大值

1.最笨的辦法-窮舉法

思路就是,取出所有可能的子陣列,即找出所有可能的0≤i≤j≤n,然後求出陣列從i到j的所有數的和再對比,這樣的方法時間複雜度較高,python實現如下:

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n=len(nums);
        ans = -100000000000;
        for i in range(0,n):
            for j in range(i,n):
                sums =sum(nums[i:j+1]);
                ans=max(ans,sums)
        return ans

提示超時,最終執行的輸入如下:

此時的時間複雜度為O(n^3)

2.第一次優化:

這一步求和的時候,每次沒有必要從i到j完整求和,只要儲存了上一次求和的結果,之後只要在前面求和的基礎上繼續累加就可以。

具體方法就是,把sums=0在j迴圈之前宣告,j進行迴圈時,每次求和是在前一次求和的基礎上再加上num[j]:

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n=len(nums);
        ans = -100000000000;
        for i in range(0,n):
            sums = 0
            for j in range(i,n):
                sums += nums[j];
                ans=max(ans,sums)
        return ans

此時超時的結果為,有提升:

時間複雜度此時為O(n^2)

相關推薦

演算法學習-連續陣列求和

1.最笨的辦法-窮舉法 思路就是,取出所有可能的子陣列,即找出所有可能的0≤i≤j≤n,然後求出陣列從i到j的所有數的和再對比,這樣的方法時間複雜度較高,python實現如下: class Solution(object): def maxSubArray(s

演算法學習-零陣列連續陣列

題目 對於長度為N的陣列A,求連續子陣列的和最接近0的值。 如: 陣列A:1,-2,3,10,-4,7,2,-5 它是所有子陣列中,和最接近0的是哪個? 演算法流程 申請比A長1的空間sum[-1,0,...,N-1],sum[i]是A的前i項和。定義sum[-

筆試面試演算法經典--連續陣列乘積及連續陣列和(Java)

1. 子陣列的最大和 輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。例如陣列:arr[]={1, 2, 3, -2, 4, -3 } 最大子陣列為 {1, 2, 3, -2,

經典演算法——連續陣列乘積

Maximum Product Subarray Find the contiguous subarray within an array (containing at least one number) which has the largest product.

【劍指Offer學習】【面試題31:連續陣列和】

題目:輸入一個整型陣列,數組裡有正數也有負數。陣列中一個或連續的多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為O(n)。 例子說明: 例如輸入的陣列為{1, -2, 3, 10, -4, 7, 2, -5},和最大的子陣列為{3,

演算法--三種方法求連續陣列

這是一道考的爛的不能再爛的題目,但是依然有很多公司樂於將這樣的題目作為筆試或面試題,足見其經典。 題目描述: 輸入一個整形陣列,數組裡有正數也有負數。 陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。 求所有子陣列的和的最大值。要求

演算法拾遺】三種方法求連續陣列

    這是一道考的爛的不能再爛的題目,但是依然有很多公司樂於將這樣的題目作為筆試或面試題,足見其經典。    問題是這樣的:一個整數陣列中的元素有正有負,在該陣列中找出一個連續子陣列,要求該連續子陣列

[劍指offer]連續陣列

本博文引自:http://blog.csdn.net/u014458048/article/details/54971991 題目描述:  輸入一個整形陣列,數組裡有正數也有負數。  陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的

python實現連續陣列

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15

劍指offer系列(十二)小的k個數, 連續陣列和,整數中1出現的個數

最小的k個數 題目描述 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 解題思路: 思路1,這一題應用堆排序演算法複雜度只有O(nlog k),堆是完全二叉樹的一種,最大堆就是最上面的數是最大的,該方法基於二

劍指Offer 30. 連續陣列和 (陣列

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2}

【Java】 劍指offer(44) 連續陣列和 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集

本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集   題目    數字以0123456789101112131415…的格式序列化到一個字元序列中。在這個序列中,第5位(從0開始計數)是5,第13位是1,第19位是4,等等。請寫一個

《劍指offer》系列 連續陣列和(Java)

連結 牛客:連續子陣列的最大和 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊

劍指offer_連續陣列

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-

(劍指offer)連續陣列

時間限制:1秒 空間限制:32768K 熱度指數:176092 本題知識點: 陣列 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量

連續陣列

HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,

劍指offer題解(連續陣列和)

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-

劍指Offer-42 連續陣列

題目: 輸入一個 非空 整型陣列,數組裡的數可能為正,也可能為負。陣列中一個或連續的多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為O(n)。 樣例 輸入:[1, -2, 3, 10, -4, 7, 2, -5] 輸出:18 解答: class Solution

劍指Offer-連續陣列

題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,

連續陣列

明確題意: 一: 連續 二: 求和,並不需要返回子陣列的位置 三: 整數:負整數,0,正整數 解法一:O(N^2) int MaxSum(int *arr,