輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為o(n)。
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
(1 <= arr.length <= 10^5,-100 <= arr[i] <= 100)
思路1:記錄字首和思想求一段連續的子陣列的最大值,即任意區間【i,j】和的最大值,可以先記錄字首和。用sum[i]表示前i個元素的和,這樣任意區間【i,j】的和可以表示為sum[j]-sum[i]+nums[i];(此思路會超時,時間複雜度高)
class
solution
int res=sum[0]
;//注意res的初始化不能是0
for(
int i=
0;ireturn res;}}
;
思路2:動態規劃思想
考慮所有問題的解,連續子陣列必定以某乙個下標 i 結尾。定義dp[i]:以下標 i 結尾的連續陣列的最大值。以下標 i 結尾必有數字nums[i],考慮是否有前i-1下標內的元素,當dp[i-1]<0時,dp[i]=nums[i]時最大,dp[i-1]>0時,dp[i]=nums[i]+dp[i-1]最大。
因此dp[i]=max(nums[i],nums[i]+dp[i-1])
class
solution
return res;}}
;
leetcode 連續的子陣列和
給定乙個包含 非負數 的陣列和乙個目標 整數 k,編寫乙個函式來判斷該陣列是否含有連續的子陣列,其大小至少為 2,且總和為 k 的倍數,即總和為 n k,其中 n 也是乙個整數。示例 1 輸入 23,2,4,6,7 k 6 輸出 true 解釋 2,4 是乙個大小為 2 的子陣列,並且和為 6。示例...
leetcode面試題42 連續子陣列的最大和
題目描述 示例動態規劃 分析 結果輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組 成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。這道題網上的解法有...
Leetcode 連續子陣列的最大和
leetcode 輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。要求時間複雜度為o n 示例1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。貪心演算法 每一步都求出最優...