題目描述:
輸入乙個整形陣列,陣列裡有正數也有負數。
陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
求所有子陣列的和的最大值。要求時間複雜度為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 ...