二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
nowcoder
package 剑指offer;
/**
* @author: xingt mym_74@163.com
* @date: 2019/10/27, 11:59
* @version: 1.0
* 时间复杂度:O(行高 + 列宽)O(行高+列宽)
* 空间复杂度:O(1)O(1)
*/
/**
* 从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。
* 于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。
*/
public class find2DArrays {
public boolean Find(int target, int [][] array) {
int rows = array.length;
int cols = array[0].length;
// i和j定义的是左下元素坐标
int i = rows-1, j = 0;
//使左下角元素移动后不超出数组范围
while(i>=0 && j <cols){
//查找的元素较少,往上找
if(target<array[i][j]){
i--;
}
//查找的元素较大,往右找
else if(target>array[i][j]){
j++;
}
//相等则代表找到了
else {
return true;
}
}
return false;
}
}