将每一个元素视作L左下角的数字,由矩阵性质可知L也是从小到大有序的,所以左下角数比上边所有数大,比右边所有数小。当左下角数大于x时,比左下角数更大的右边的数可以全部舍弃,于是左下角上移一格;当左下角数小于x数,比左下角数小的上边的数可以全部舍弃,于是左下角右移。最多可以舍弃n行m列(找到值的时候不舍弃直接返回了),所以时间复杂度最坏是O(n+m)
class Solution { public: vector<int> findElement(vector<vector<int> > &mat, int n, int m, int x) { int a = n - 1, b = 0; //左下角坐标 while(a >= 0 && b < m) { //防止越界 if(mat[a][b] == x) return vector<int> {a, b}; else if(mat[a][b] < x) b++; //左下角右移 else a--; //左下角上移 } return vector<int> {0, 0}; } };