leetcode第196場周賽

2022-04-11 08:02:32 字數 1584 閱讀 1287

給你乙個只包含 0 和 1 的 rows * columns 矩陣 mat ,請你返回有多少個 子矩形 的元素全部都是 1 。

示例 1:

輸入:mat = [[1,0,1],

[1,1,0],

[1,1,0]]

輸出:13

解釋:有 6 個 1x1 的矩形。

有 2 個 1x2 的矩形。

有 3 個 2x1 的矩形。

有 1 個 2x2 的矩形。

有 1 個 3x1 的矩形。

矩形數目總共 = 6 + 2 + 3 + 1 + 1 = 13 。

示例 2:

輸入:mat = [[0,1,1,0],

[0,1,1,1],

[1,1,1,0]]

輸出:24

解釋:有 8 個 1x1 的子矩形。

有 5 個 1x2 的子矩形。

有 2 個 1x3 的子矩形。

有 4 個 2x1 的子矩形。

有 2 個 2x2 的子矩形。

有 2 個 3x1 的子矩形。

有 1 個 3x2 的子矩形。

矩形數目總共 = 8 + 5 + 2 + 4 + 2 + 2 + 1 = 24 。

示例 3:

輸入:mat = [[1,1,1,1,1,1]]

輸出:21

示例 4:

輸入:mat = [[1,0,1],[0,1,0],[1,0,1]]

輸出:5

1 <= rows <= 150

1 <= columns <= 150

0 <= mat[i][j] <= 1

先列舉矩陣上下兩邊,再列舉矩陣左右兩邊,check,不滿足條件就break,滿足條件sum++。(稍微優化一下就是二維字首和判斷全1)

本蒟蒻還是太菜,比賽的時候只會用最暴力的方法,連二維字首和都沒有想到,n^6鐵定超時。。。

class solution 

if(!flag) break;}}

if(flag) sum ++;}}

}}

return sum;

}};

參考的b站上大佬的思路,列舉上下邊界,二維壓成一維 是常用的套路,類似的題可以做做面試題 17.24. 最大子矩陣

列舉上下邊界i和j,二維壓成一維,sum[k]記錄當前列k的總和,sum[k]=i-j+1說明列k全1,連續cnt次列全1給ans貢獻1+2+...+cnt。為什麼呢,舉個列子:矩陣[[1,1,1]]有三次列連續列全1,所以有1+2+3個全一子矩陣。

class solution 

else cnt = 0;}}

}return ans;

}

};

矩陣裡每個點(i.j)統計他這行左邊到他這個位置最多有幾個連續的1,存為left[i]j。然後對於每個點(i.j),我們固定子矩形的右下角為(i.j),利用left從該行i向上尋找子矩陣左上角為第k行的矩陣個數。每次將子矩陣個數加到答案中即可。

class solution }}

return ans;

}};

LeetCode周賽記錄 第196場周賽

2020年7月5日,leetcode第196場周賽個人記錄。第一次參加leetcode周賽,4道題目完成3道,中國排名163,全球排名377。對我個人來說算是個普通成績吧。以後打算每兩周參加一次周賽,同時利用部落格記錄下每次的成績,同時分享一下對於題目的個人想法和感受。給你乙個數字陣列 arr 如果...

LeetCode第196場周賽題解

2020.7.5第196場周賽 判斷乙個給定的數列能否形成乙個等差數列。先將給定的數列排序,判斷每兩個相鄰的數的差值是否相等即可。class solution return true 給定兩個陣列,分別表示向左走和向右走的螞蟻的初始位置,n為木板的總長度,兩隻螞蟻相遇時會改變方向,計算最後乙隻螞蟻從...

leetCode第196場周賽學習

排序一下 然後列舉 只要不滿足等差數列性質就返回false,否則就返回true class solution return true 有一塊木板,長度為 n 個 單位 一些螞蟻在木板上移動,每只螞蟻都以 每秒乙個單位 的速度移動。其中,一部分螞蟻向 左 移動,其他螞蟻向 右 移動。當兩隻向 不同 方...