思路
- 数组指针移动,从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; } }