leetcode面試題42 連續子陣列的最大和

2022-07-04 21:15:09 字數 1261 閱讀 3442

題目描述

示例動態規劃

分析**

結果輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組  成乙個子陣列。求所有子陣列的和的最大值。

要求時間複雜度為o(n)

輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]

輸出: 6

解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

這道題網上的解法有很多,這裡介紹一下動態規劃的解法,首先我們應該思考這道題可不可以使用動態規劃來做?

動態規劃解決的問題是多階段決策最優模型,也可以理解成全域性最優。乙個問題的解決過程,對應著多個決策階段,每乙個決策階段都對應著一組狀態。我們要做的就是尋找一組決策序列,最終產生期望的最優解。

這裡隱含著使用動態規劃的幾個條件

最優子結構:最終的最優解,可以通過子結構的最優解推導出來。

無後效性:我們關注的問題是狀態。狀態一旦確定了,就不受後續決策階段的影響。

我們分析一下這道題,全域性最優解是序列子陣列的最大和,但是這裡我們可以把這道題進行乙個拆分:

1.求以arr[i]結尾的序列子陣列最大和組成的陣列dp

2.陣列dp中求最大值

這樣我們就可以得到乙個dp方程:dp[n] = max(dp[n - 1] + arr[n], arr[n]);(這道題的難點就在於這裡,需要進行乙個轉換)

11}這裡使用了乙個tmp變數,代替了**中的dp陣列,節省了一部分儲存空間。

最後,期待您的訂閱和點讚,專欄每週都會更新,希望可以和您一起進步,同時也期待您的批評與指正!

面試題42 連續子陣列的最大和

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

面試題42 連續子陣列的最大和

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 示例1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。1 arr.length 10 5 100 a...

面試題42 連續子陣列的最大和

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