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