最简单易懂且效率也很高的代码如下:
时间复杂度O(n),空间复杂度O(1)
public class Solution {
public boolean Find(int target, int [][] array) {
if (array == null || array.length == 0) {
return false;
}
//本题的关键是不能从左上角或者右下角开始找
//而是要从左下角或者右上角的元素找
int innerLength = array[0].length;
int temp = 0;
//我这里从左下角的元素开始找
for (int i = array.length - 1; i >= 0; i--) {
for (int j = temp; j < innerLength; j++) {
if (target == array[i][j]) {
return true;
} else if (target < array[i][j]) {
//这里用临时变量做了微小的优化,
// 也就是当这一行的这个元素比目标值大的时候,
// 我们可以直接去上一行的跟这个对应的下标的元素对比即可
temp = j;
break;
}
}
}
return false;
}
}


京公网安备 11010502036488号