中级农民
- 积分
- 108
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-6-27
- 最后登录
- 1970-1-1
|
Leetcode上有个discussion:https://leetcode.com/discuss/interview-question/algorithms/185621/horizontal-and-vertical-cuts-in-a-matrix
m x n matrix, H horizontal cuts, V vertical cuts.
思路:
第一步:利用 count matrix 记录左上角1出现的次数。count[j] 为 row 0, 1, 2, ... i 和 col0, 1, 2,...j 的sub-matrix内出现的1 的次数。
第二步:因为水平方向的cut必须要把矩阵分成 H + 1分,所以每一份是total/(H + 1);竖直方向cut要分成total/(V + 1)份。for loop一下row和col可以找到相应的cut 的row 和 col。如果不成功,返回false;如果成功,进行下一步。
(Note:但是第二部如果成功把row和col分开,它只是充分条件,为了确认每个submatrix有 total/[(H + 1) * (V + 1)] 个1,我们必须进行下一步。)
第三步:利用第一步的count matrix 和第二步得到的cut的row 和 col来确认每个submatrix count = total/[(H+1)*(V+1)].
Time O(m *n ), space O(m * n). |
|