題意:給你乙個只包含0和1的n×m大小的矩陣,問你第二大的全為1的矩形有多大。(不嚴格第二大)
題解:每個矩陣的大小由長和寬決定,矩形的長對應原矩陣中每一行最多有多少個元素,他們向上擴充套件的連續「1」的數量一樣,矩形的寬對應向上擴充套件的連續「1」的數量。我們從第一行開始列舉,一開始先更新該行所有元素向上擴充套件最多有多少個連續「1」,設為c[j]陣列,然後用乙個單調遞增的棧維護該行的c[j]陣列,找出該行每個元素以自己為最小值,向左向右分別最遠擴充套件到**,這裡就有l[i],r[i]陣列,此時最大的矩形面積應為(r[i]-l[i]+1)* c[j],第二小的值是max((r[i]-l[i])* c[j],(r[i]-l[i]+1) * (c[j] - 1)),然後不斷更新最大值和第二大值,最後的第二大值就是答案。
#include
#include
#include
#include
#include
using namespace std;
const int maxn =
1005
;char a[maxn]
[maxn]
;int c[maxn]
,l[maxn]
,r[maxn]
;void
update
(int &mx,int &mmx,int x)
mmx = mx;
mx = x;}
int main()
for(int i=
0; i) stack s;
for(int j=
0; j) s.
push
(j);
} int mx1 =
0,mmx1 =0;
for(int j=
0; j)update
(mx,mmx,mx1)
;update
(mx,mmx,mmx1);}
printf
("%d"
,mmx)
;}
第二大整數
問題描述 編寫乙個程式,讀入一組整數 不超過 20個 當使用者輸入 0時,表示輸入結束。然後程式將從這組整數中,把第二大的那個整數找出來,並把它列印出來。說明 1 0表示輸入結束,它本身並不計入這組整數中。2 在這組整數中,既有正數,也可能有負數。3 這組整數的個數不少於2個。輸入格式 輸入只有一行...
第二大的數
這是微軟的一道面試題,是我找工作時看的面試寶典裡面的一題,覺得很有意思,這種處理的方法應該可以用在很多地方。下面就來進入正題吧。題目 寫乙個函式,找出乙個整數陣列中,第二大的數。時間複雜度o n const int minnumber 32767 int ctestsizeofdlg find se...
演算法提高 第二大整數
問題描述 編寫乙個程式,讀入一組整數 不超過20個 當使用者輸入0時,表示輸入結束。然後程式將從這組整數中,把第二大的那個整數找出來,並把它列印出來。說明 1 0表示輸入結束,它本身並不計入這組整數中。2 在這組整數中,既有正數,也可能有負數。3 這組整數的個數不少於2個。輸入格式 輸入只有一行,包...