题目:给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数
组中。
什么是二维数组?
就是一个存储一维数组的特殊数组用 arr[][]表示 ,其可看作矩阵的结构
arr[表示此数组中的元素个数][表示一维数组中的元素个数];
如图所示的arr[0][4]=15;
列如:
int[][] arr =new int [3][];
int [][] arr1=new int [3][4];
第一种定义方法只定义了此数组的元素个数,其元素(一维数组元素的个数没有规定)
第二种描述的是一个大小为3,其每一个元素(一维数组)的大小为4的二维数组
方法一:
全部遍历匹配(该方法漏掉了递增的条件,不可取)
//target待查找的数
public class Solution {
public boolean Find(int target, int [][] array) {
for(int a=0;a<array.length;a++){
for(int b=0;b<array[0].length;b++){
if(target==array[a][b])
return true;
}
}
return false;
}
}
方法二
思路:(缩小区间)对于目标数组,小于它的数一定在其左边,大于它的数一定在其下面。因此可从右上角开始,来缩小查找的区间。
public boolean Find(int target, int[][] arr) {
int rows = arr.length, cols = arr[0].length;
int r = 0, c = cols - 1;
while (r <= rows - 1 && c >= 0) {
if (target == arr[r][c])
return true;
else if (target > arr[r][c])
r++;
else
c--; }
return false;
}