题目地址:
https://www.lintcode.com/problem/898/
给定一个二维 0 − 1 0-1 0−1矩阵,题目保证每行都含 1 1 1,并且 0 0 0都排在 1 1 1的左边。求出现在最左边的 1 1 1的纵下标。
可以对每行用二分。代码如下:
public class Solution {
/**
* @param A: The 2-dimension array
* @return: Return the column the leftmost one is located
*/
public int getColumn(int[][] A) {
// Write your code here
int res = A[0].length;
for (int[] row : A) {
res = Math.min(res, find(row));
}
return res;
}
private int find(int[] A) {
int l = 0, r = A.length - 1;
while (l < r) {
int m = l + (r - l >> 1);
if (A[m] == 1) {
r = m;
} else {
l = m + 1;
}
}
return l;
}
}
时间复杂度 O ( m log n ) O(m\log n) O(mlogn),空间 O ( 1 ) O(1) O(1)。