子陣列最大和問題

2021-09-29 23:29:15 字數 1454 閱讀 3028

1.最大子序和

給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

示例:輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

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

class solution 

else

ans = ans>sum?ans:sum;

}return ans;}};

2.環形子陣列最大和問題

給定乙個由整數陣列 a 表示的環形陣列 c,求 c 的非空子陣列的最大可能和。

在此處,環形陣列意味著陣列的末端將會與開頭相連呈環狀。(形式上,當0 <= i < a.length 時 c[i] = a[i],而當 i >= 0 時 c[i+a.length] = c[i])

此外,子陣列最多只能包含固定緩衝區 a 中的每個元素一次。(形式上,對於子陣列 c[i], c[i+1], ..., c[j],不存在 i <= k1, k2 <= j 其中 k1 % a.length = k2 % a.length)

示例 1:

輸入:[1,-2,3,-2]

輸出:3

解釋:從子陣列 [3] 得到最大和 3

示例 2:

輸入:[5,-3,5]

輸出:10

解釋:從子陣列 [5,5] 得到最大和 5 + 5 = 10

示例 3:

輸入:[3,-1,2,-1]

輸出:4

解釋:從子陣列 [2,-1,3] 得到最大和 2 + (-1) + 3 = 4

示例 4:

輸入:[3,-2,2,-3]

輸出:3

解釋:從子陣列 [3] 和 [3,-2,2] 都可以得到最大和 3

class solution 

//2.跨越邊界的最小值 陣列求和再減去無環的子陣列的最小和

//求乙個最小值子陣列 總和減去最小連續子陣列,即為環形子陣列

int s = accumulate(a.begin(),a.end(),0);

int ans = int_max;

int min_value=a[0];

for(int i=1;i優化:

//只是**量優化了

class solution

if(res<0) return res;

return max(s-ans,res);

}};//賊神奇 if else居然比三元運算子快?

連續子陣列最大和問題

輸入乙個整形陣列,求陣列中連續的子陣列使其和最大。比如,陣列x 應該返回 x 2.6 的和187.我們很自然地能想到窮舉的辦法,窮舉所有的子陣列的之和,找出最大值。i,j的for迴圈表示x i.j k的for迴圈用來計算x i.j 之和。maxsofar 0 for i 0,n forj i,n s...

子陣列的最大和問題

輸入乙個整形陣列,求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。注 如果當前狀態的累加和小於0,則放棄該狀態,將其歸零。依次遍歷陣列中的每個元素,把他們相加,如果累加和小於0,則 ...

子陣列最大和

看到的乙個面試題。有很多人已經寫過,在此記下,明天給出拓展。題目 輸入乙個整型陣列,陣列裡有正數也有負數,陣列中連續的乙個或多個整數組成為子陣列,求有最大和的子陣列。要求 時間複雜度o n 如下 include using namespace std int main void int size s...