题目描述:
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
Consider the following matrix:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
Given target = 5, return true.
Given target = 20, return false.
解法一:暴力解法
public boolean isExist(int[][] nums,int target){
boolean flag = false;
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums[0].length;j++){
if(nums[i][j] == target)
{
flag = true;
}
}
}
return flag;
}
解法二:该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来快速地缩小查找区间,每次减少一行或者一列的元素。
public boolean isExists(int[][] nums,int target){
int row = nums.length,cols = nums[0].length;
int r = 0,c = cols -1;
while (r <= row -1 && c >= 0)
{
if(target == nums[r][c]) {
return true;
}
else if(target > nums[r][c])
{
r++;
}
else {
c--;
}
}
return false;
}