0302:包含全部黑色像素的最小矩形(★★)
目录
题目
图片在计算机处理中往往是使用二维矩阵来表示的。
给你一个大小为 m x n 的二进制矩阵 image 表示一张黑白图片,0 代表白色像素,1 代表黑色像素。
黑色像素相互连接,也就是说,图片中只会有一片连在一块儿的黑色像素。像素点是水平或竖直方向连接的。
给你两个整数 x 和 y 表示某一个黑色像素的位置,请你找出包含全部黑色像素的最小矩形(与坐标轴对齐),并返回该矩形的面积。
你必须设计并实现一个时间复杂度低于 O(mn) 的算法来解决此问题。
示例 1:
输入:image = [["0","0","1","0"],["0","1","1","0"],["0","1","0","0"]], x = 0, y = 2 输出:6
示例 2:
输入:image = [["1"]], x = 0, y = 0 输出:1
提示:
m == image.lengthn == image[i].length1 <= m, n <= 100image[i][j]为'0'或'1'1 <= x < m1 <= y < nimage[x][y] == '1'image中的黑色像素仅形成一个 组件
分析
要求时间复杂度低于 O(mn),也就是不能遍历完矩阵。于是考虑二分查找:
- 假设最左边的黑色像素的横坐标是 y1,那么
- 对任意 0<=c<y1,第 c 列没有黑色像素
- 对任意 y1<=c<=y,第 c 列有黑色像素
- 所以可以二分查找出 y1
- 所求矩形的左边界即是 y1
- 同理可找出右/上/下边界,即得到面积
解答
|
|
48 ms