二维数组中的查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组array和一个整数target,判断数组中是否含有该整数。
-
思路一
-
根据二维数组自上而下、从左到右递增的规律,选取右上角或左下角作为与target比较的起点。
以右上角元素array[row][col]
为例:
当target<array[row][col]
,说明target必定在array[row][col]
的左边,则col--
;
当target>array[row][col]
,说明target必定在array[row][col]
的下面,则row++
;
当target==array[row][col]
,返回;
public class Solution {
public boolean Find(int target, int [][] array) {
int row = 0, col = array[0].length-1;
while(row<array.length && col >=0){
if(array[row][col] > target){
col--;
}else if(array[row][col] < target){
row++;
}else{
return true;
}
}
return false;
}
}
-
思路二
- 遍历二维数组的每一行,判断target是否可能在数组的这一行中出现,通过二分法查找
import java.util.Arrays;
public class Solution {
public boolean Find(int target, int [][] array) {
for(int i=0; i<array.length; i++){
if(array[i].length == 0 || target<array[i][0])break;
if(target<=array[i][array[i].length-1]){
int location = Arrays.binarySearch(array[i], target);
if(location >= 0)return true;
}
}
return false;
}
}