Topic:
An image was represented by a binary matrix with as a white pixel and as 0
1
a black pixel. The black pixels is connected, i.e., there was only one black region. Pixels is connected horizontally and vertically. Given the location (x, y)
of the one of the black pixels, return to the area of the smallest (axis-aligned) rectangle that enclose s All Black pixels.
For example, given the following image:
[ "0010", "0110", "0100"]
and x = 0
, y = 2
Return 6
.
Links: http://leetcode.com/problems/smallest-rectangle-enclosing-black-pixels/
Exercises
Find the smallest rectangle that contains all black pixel. Here we use two points to find. Because a black pixel point (x, y) is given, and all black pixel are connected, in the case of row search, all column containing black pixel must be contiguous when mapped to row X. So we can use binary search to search for a column with black pixel on the far left in 0 to Y. You can then continue searching the upper and lower bounds. When searching the right and bottom boundaries, we're looking for the first ' 0 ', so we're going to pass a Boolean variable Searchlo to judge.
Time Complexity-o (Mlogn + NLOGM), Space complexity-o (1)
Public classSolution { Public intMinarea (Char[] Image,intXinty) {if(Image = =NULL|| Image.length = = 0) { return0; } intRowNum = image.length, Colnum = image[0].length; intleft = BinarySearch (image, 0, y, 0, RowNum,true,true); intright = BinarySearch (image, Y + 1, colnum, 0, RowNum,true,false); inttop = BinarySearch (image, 0, X, left, right,false,true); intbot = BinarySearch (image, X + 1, RowNum, left, right,false,false); return(right-left) * (bot-top); } Private intBinarySearch (Char[] Image,intLointHiintMinintMaxBooleanSearchhorizontal,BooleanSearchlo) { while(Lo <hi) { intMid = lo + (Hi-lo)/2; BooleanHasblackpixel =false; for(inti = min; i < Max; i++) { if(Searchhorizontal Image[i][mid]: image[mid][i]) = = ' 1 ') {Hasblackpixel=true; Break; } } if(Hasblackpixel = =Searchlo) {Hi=mid; } Else{lo= Mid + 1; } } returnLo; }}
Reference:
Https://leetcode.com/discuss/68246/c-java-python-binary-search-solution-with-explanation
Https://leetcode.com/discuss/71898/java-concise-binary-search-4x-faster-than-dfs
Https://leetcode.com/discuss/68407/clear-binary-search-python
Https://leetcode.com/discuss/68233/java-dfs-solution-and-seeking-for-a-binary-search-solution
Https://leetcode.com/discuss/68738/very-easy-dfs-java-solution-with-comments
Https://leetcode.com/discuss/70670/dfs-bfs-binary-search-and-brute-force-interation
302.Smallest Rectangle enclosing Black Pixels