最简单易懂且效率也很高的代码如下:
时间复杂度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; } }