題目描述
示例動態規劃
分析**
結果輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組 成乙個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為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...