陣列中對打矩形區域為1的數量

2021-08-07 01:17:49 字數 1027 閱讀 2617

題目:

給定乙個矩形矩陣map,其中的值只有0和1兩種,求其中全是1的所有矩形區域中,最大的矩形區域為1的數量。

例如:1 0 1 1

1 1 1 1

1 1 1 0

其中,最大的矩形區域有6個1,所以返回6.

思路:將問題的整個矩陣分成以每行為底的分問題,從上至下,先是以第一行為底,第一行是乙個一維陣列,這裡還是要用到單調棧的概念,從陣列開頭開始掃瞄他右邊比她小的到他左邊比她小的數之間的距離,然後就能求出第一行的最大為1的子陣列大小,然後以第二行為底,這裡還要用到壓縮矩陣的概念,這裡規定:此行每個元素向上遍歷,若遇到1,繼續向上,遇到0停止,則次元素值為連續1的和,若次元素為0,則不向上遍歷,此元素值定為0,遍歷完畢後,第二行矩陣壓縮完畢,同第一行一樣是個一維陣列,則也跟第一行一樣處理。依次繼續第三行,第四行,直到整個陣列遍歷完畢。主要要理解區域性單調棧向左右擴的概念。

注釋:單調棧:顧名思義,棧裡元素是單調遞增(不存在相等)或單調遞減的,實現:以從棧頂到棧底依次增大為例,每次入棧當符合從棧頂到棧底依次增大,那就依次入棧,否則棧頂元素出棧,引起棧頂元素出棧的是將要入棧的元素,則棧頂元素右邊離他最近的比它小的數就是將要入棧的元素,左邊離它最近比她小的數就是他棧下面的元素,若棧空,沒有數了,那麼棧頂元素就左邊就沒有比他小的數,最後還要依次pop棧。

public static void main(string args) , , , };

system.out.println(maxrecsize(map));

}public static int maxrecsize(int map)

int maxarea=0;

int height=new int[map[0].length];

for (int i=0;istack=new stack();

for (int i=0;i//遍歷完陣列,處理棧裡剩餘的元素,此時棧底元素最小,即j位置

while (!stack.isempty())

return maxarea;

}

在陣列中斜率為 1與 1的元素關係

在解決八皇后問題中,需要解決隱式約束條件 斜率為1或 1直線上元素有什麼關係,即符合什麼條件的元素是在同一條斜率為 1或 1的直線上 設兩個陣列元素 x1,y1 和 x2,y2 切記,這裡代表的是乙個元素下標,且y軸方向向下,就無法使用斜率公式了 k y2 y1 x2 x1 否則會得出錯誤的關係01...

長度為n值域為 0,n 1 的陣列中重複的數字

問題描述 在乙個長度為n的陣列裡,所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的,也不知道每個數字重複幾次。要找出陣列中任意乙個重複的數字。解決思路 n 個數字因為它們都在 0 到 n 1 的範圍內,如果不重複,每乙個數字都能被放在 nums i i 的位置上 值...

python 統計陣列中不同元素的數量

很簡單,使用numpy.unique 函式,查詢陣列的唯一元素,返回陣列的排序後的唯一元素。官方文件見 import numpy as np data np.array 1,2,3 0,1,2 3,4,5 np.unique data num len np.unique data 結果 array ...