007求陣列中子陣列最大的和

2021-09-30 11:29:06 字數 2338 閱讀 1459

題目描述:

輸入乙個整形陣列,陣列裡有正數也有負數。

陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。

求所有子陣列的和的最大值。要求時間複雜度為o(n)。

例如輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4, 7, 2,

因此輸出為該子陣列的和18。

思路一,暴力法。通過三層迴圈,找出所有子陣列,求和,比較,得出最大和,時間複雜度o(n^3)

int maxsum01(int array,int n)

} return max;

}

思路二,線性遍歷陣列,如果將當前元素加入之後sum<=0,說明截至到該元素,往後再加元素也不會達到子陣列和最大,此時將sum更換為下乙個元素,每次加入新元素之後都會與現有的max進行比較,以保留最大值。時間複雜度o(n)

int maxsum02(int array,int n)

else

if(sum>max)

max = sum;

} return max;

}

當陣列元素全為負數時,返回陣列中最大元素值。

思路三,利用動態規劃的方法

設sum[i] 為前i個元素中,包含第i個元素且和最大的連續子陣列,result 為已找到的子陣列中和最大的。對第i+1個元素有兩種選擇:做為新子陣列的第乙個元素、放入前面找到的子陣列。

sum[i+1] = max(a[i+1], sum[i] + a[i+1])

result = max(result, sum[i])

int maxsum03(int array,int n)

b[0] *= a[1];

int max = -2147483647 - 1;

cout<

1 給定整型陣列,其中每個元素表示木板的高度,木板的寬度都相同,求這些木板拼出的最大矩形的面積。並分析時間複雜度。

此題類似leetcode裡面關於連通器的題,需要明確的是高度可能為0,長度最長的矩形並不一定是最大矩形,還需要考慮高度很高,但長度較短的矩形。如[5,4,3,2,4,5,0,7,8,4,6]中最大矩形的高度是[7,8,4,6]組成的矩形,面積為16。

解決思路:使用分治遞迴的方法,即在[start,end]區域計算出矩形的面積,計算左側的面積,計算右側的面積,找出三者中面積最大的,返回

//最大值

int max(int a,int b)

//給定陣列表示單位寬度木板的高,求最大矩形的面積

int maxsquare(int*a,int start,int end,int &max)

int maxsquare(int*a,int n)

2、最大子矩陣和

乙個m*n的矩陣,找到此矩陣的乙個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。如果所有數都是負數,就輸出0。 例如:3*5的矩陣:

1 2 0 3 4

2 3 4 5 1

1 1 5 3 0

和最大的子矩陣是:

4 55 3

最後輸出和的最大值17。

《原題目給出的答案可能有問題,對於子矩陣

3 4 5

1 5 3

的值要比給出的矩陣的和要大

》解決思路:在求最大子陣列和的基礎上,對於矩陣從i到j行,相加,得到乙個陣列,求出a[i][0-m]到a[j][0-m]之間和最大的子矩陣的和

int maxsubmatrix(int matrix[5][5],const int n,const int m)

} } return sum;

}

3、允許交換兩個數的位置 求最大子陣列和。(

???)

// you can also use includes, for example:

#include int help(vector&a)

g.resize(n);

g[n - 1] = a[n - 1];

int answer = a[n - 1];

for (int i = n - 2; i >= 0; --i)

for (int i = 1; i < n; ++i)

return answer;

}int solution(vector&a)

answer = max(answer,help(a));

return answer;

}

陣列中子陣列和的最大值

輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。例如輸入的陣列為1,2,3,1...

求陣列的最大子陣列和最大子陣列的和

輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。include using n...

求陣列中最大子陣列的和

本篇部落格介紹第二週課上小測 求陣列中最大子陣列的和,使用c 實現。1 include2 using namespace std 3int main 419 int ans 100000 20 再次遍歷,最大值即為最大子陣列的和 21for i 1 i n i 22 ans max ans,a i ...