最大欄位和問題

2022-05-09 09:06:09 字數 900 閱讀 8665

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

示例1:

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

輸出: 6

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

此題很顯然可以用多層for迴圈解決, 時間複雜度為o(n^2) .

// dp初始化

dp[0] = nums[0]

if(dp[i-1] < 0) dp[i] = nums[i]; // 自成一段

if(dp[i-1] >= 0) dp[i] = max(dp[i-1] + nums[i], nums[i])

dp[0] = nums[0]

dp[i] = max(dp[i-1] + nums[i], nums[i])

時間複雜度分析

t(n) = 2 f(n/2) + n

時間複雜度o(nlgn)

public int maxsubarray(int nums) 

private int helper(int nums, int start, int end)

// 右邊的最大值

int rsums = integer.min_value;

temp = 0;

for(int j = middle+1; j <= end; j++)

leftrightsums = rsums + lsums;

return math.max(math.max(leftsums, rightsums), leftrightsums);

}

最大欄位和問題

最大欄位和的思想是將字段分為兩部分,即將陣列平均分為兩部分,那麼最大欄位和的問題分為三種 1 最大欄位和在陣列的第一部分 2 最大欄位和在陣列的第二部分 3 最大欄位和在陣列的 中間 部分,即以陣列的中間數為起點向陣列的兩端擴充套件得到的最大子段和 這個時候就要用到遞迴的思想,最開始就分為這三種情況...

最大欄位和

include include include include include using namespace std 最大欄位和問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,...

最大欄位和

1049 最大子段和 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。input 第1行 整數序列的長度n 2 n 5...