题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二分法:
时间复杂度:O(N * logN)
// An highlighted block
public class Solution {
public boolean Find(int target, int [][] array) {
if (array.length==0 || array[0].length==0)
return false;
for(int i=0;i<array.length;i++){
if(array[i][array[0].length-1]<target)
continue;
if(array[i][0]>target)
break;
int right=array[0].length-1;
int left=0;
int mid;
while(right>=left){
mid=(right+left)/2;
if(array[i][mid]==target)
return true;
else if(array[i][mid]>target){
right=mid-1;
}
else if(array[i][mid]<target){
left=mid+1;
}
}
}
return false;
}
}
右上法:
时间复杂度:O(行高+列宽)
public class Solution {
public boolean Find(int target, int [][] array) {
int row=array.length;
int cow=array[0].length;
int i=0;
int j=cow-1;
while(i<row&&j>=0){
if(array[i][j]>target)
j--;
else if(array[i][j]<target)
i++;
else
return true;
}
return false;
}
}
暴力法:
时间复杂度:O(N^2)
public class Solution {
public boolean Find(int target, int [][] array) {
for(int i = 0;i<array.length;i++){
for(int j=0;j<array[0].length;j++){
if(array[i][j]==target){
return true;
}
}
}
return false;
}
}