二维数组查找数字题目(剑指Offer)

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数

思路:

因为每一行都是递增,每一列也是递增,所以每一行的最左边为一行的最小,最右边为一行的最大,选取最下角或者右上角,
当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
即col–;
当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,
即row++;

代码实现:

选取右上角:

public boolean Find(int target, int [][] array) {
  int row=0;
  int col=array[0].length-1;
  while(row<=array.length-1&&col>=0){
    if(target==array[row][col])
      return true;
    else if(target>array[row][col])
      row++;
    else
      col--;
  }
  return false;
}

选取左下角:

public boolean Find(int target, int [][] array) {
int row = array.length-1;
int col = 0;
while(row>=0 && col<array[0].length){
if(array[row][col] < target){
col++;
}else if(array[row][col] > target){
row--;
}else{
return true;
}
}
return false;
}

猜你喜欢

转载自blog.csdn.net/DIDI___/article/details/103256474