全1第二大矩形

2021-10-01 22:43:14 字數 1046 閱讀 8212

題意:給你乙個只包含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個。輸入格式 輸入只有一行,包...