給你乙個只包含 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 個 單位 一些螞蟻在木板上移動,每只螞蟻都以 每秒乙個單位 的速度移動。其中,一部分螞蟻向 左 移動,其他螞蟻向 右 移動。當兩隻向 不同 方...