二分查找或者顺序查找都可以,这个题有点恶心,他说行和列都是从小到大有序的结果只是行内有序,还以为整个在列上也是递增呢,恶心……
所以查找符合条件行时没办法使用二分,这里老老实实循环 ,找行中匹配元素时可以使用二分

import java.util.*;

public class Finder {

    public int[] findElement2(int[][] mat, int n, int m, int x) {
        // write code here
        if(mat[0][0]>x||mat[n-1][m-1]<x){
            return new int[] {-1,-1};
        }
        int i=0;
        while(i<n){
            if(mat[i][0]<=x&&mat[i][m-1]>=x){

                for(int j=0;j<m;j++){
                    if(mat[i][j]==x){
                        return new int[]{i,j};
                    }
                }
            }
            i++;
        }


        return new int[] {-1,-1};


    }

    public int[] findElement(int[][] mat, int n, int m, int x) {
        // write code here
            if(mat[0][0]>x||mat[n-1][m-1]<x){
            return new int[] {-1,-1};
        }
        int i=0;
        while(i<n){
            if(mat[i][0]<=x&&mat[i][m-1]>=x){

                int j=0;
                int lowJ=0;
                int highJ=m-1;
                while(lowJ<=highJ){
                    j=(highJ+lowJ)/2;
                    if(mat[i][j]>x){
                        highJ=j-1;
                    }else if(mat[i][j]<x){
                        lowJ=j+1;
                    }else{
                        return new int[]{i,j};
                    }
                }
            }
            i++;
        }


        return new int[] {-1,-1};


    }
}