一、问题描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的
一个二维数组和一个整数,判断数组中是否含有该整数。
二、解题思路:
- 首先选取数组中右上角的数字;
- 如果该数字等于要查询的数字,则查询结束;
- 如果该数字大于要查询的数字,则剔除这个数字所在的列;
- 如果该数字小于要查询的数字,则剔除这个数字所在的行。
- 若每次要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到,或者查找范围为空。
(此图来源于)
代码实现:
时间复杂度:O(logn)
public class Solution {
public boolean Find(int target, int [][] array) {
//行数
int rows = array.length;
//列数
int columns = array[0].length;
//右上角元素行列
int row = 0;
int column = columns-1;
while(row<rows && column>=0){
//如果当前数字等于要查找的数字,则返回true
if(array[row][column] == target)
return true;
//如果当前数字大于要查找数字,则列数减一
else if(array[row][column] > target)
column--;
//如果当前数字小于要查找数字,则行数加一
else
row++;
}
return false;
}
}