思路
- 数组指针移动,从0 0出发 (更好的思路是从0,n和n,0出发),根据状态移动
- 二份查找o(nlogn),因为有内置函数,更快完成本题
踩坑:
对于数组 [[]] array.length=1 array[0]=0,所以二维数组判空条件不仅仅是 array.length<=0
实测没加 array==null也AC,保险起见加上,
代码
二分查找
//二分查找
import java.util.*;
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null || array.length<=0 || array[0].length<=0){
return false;
}
for(int i=0;i<array.length;i++){
if(Arrays.binarySearch(array[i],target)>=0){
return true;
}
}
return false;
}
} 指针移动,根据状态移动
//从 0 0 出发 数组指针移动
public class Solution {
public boolean Find(int target, int [][] array) {
if(array.length<=0||array[0].length<=0){
return false;
}
int p=0,q=0;// p行q列
while(p<array.length && q<array.length){
if(array[p][q]<target){ //状态 1
//如果q+1大于tartget
if(q==array[0].length-1 || array[p][q+1]>target){
p++;
}else{
q++;
}
}else if(array[p][q]>target){ //状态 2
if(q==0){
p++;
}else{
q--;
}
}else{//状态 3
return true;
}
}
return false;
}
} 
京公网安备 11010502036488号