题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解答:
①从右上角或左下角开始找
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null){
return false;
}
boolean flag=false;
int rows=array.length,columns=array[0].length;
int i=0,j=columns-1;
while(i<rows&&j>=0){
if(target==array[i][j]){
flag=true;
break;
}else if(target<array[i][j]){
j--;
}else{
i++;
}
}
return flag;
}
}
运行时间:186ms
占用内存:16276K
②二分查找法
每一行运用二分查找法,时间复杂度为O(nlogn)(以2为底)
public class Solution {
public boolean Find(int target, int [][] array) {
boolean flag=false;
for(int i=0;i<array.length;i++){
int h=0,t=array[i].length-1;
while(h<=t){
int mid=(h+t)/2;
if(array[i][mid]==target){
flag=true;
break;
}else if(array[i][mid]>target){
t=mid-1;
}else{
h=mid+1;
}
}
}
return flag;
}
}
运行时间:186ms
占用内存:17380K