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