题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路
因为矩阵中的每一个数,左边都比它小,下边都比它大。因此,从右上角开始查找,就可以根据 target 和当前元素的大小关系来缩小查找区间。
package Day01;
public class Test01 {
/**
* T1. 二维数组中的查找
* 题目描述
* 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
* 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*/
/***
* 思路:
* 每一行都已经排好序,这样无疑是为了降低算法的时间复杂度
* target 为需要找到的整数
* array[m][n] 为二维数组,m行n列,array[0]就是一维数组,array=m,array[0].length=n
* 从右上角开始查询,只会向左 ← 或者向下 ↓ 进行查询,直到走到左下角,或者查询到相应target
*/
public boolean FindTarget(int target, int[][] array) {
if(array == null || array.length == 0 || array[0].length == 0) {
return false;
}
int m = 0, n = array[0].length - 1;//从右上角开始找,array[0][n]
while(m <= array.length - 1 && n >= 0) {
if(target == array[m][n])
return true;
else if(target > array[m][n])
m ++;
else
n --;
}
return false;
}
public static void main(String[] args) {
int[][] array = new int[][]{{1, 4, 10},{7, 9, 13}};
Test01 test01 = new Test01();
System.out.println(test01.FindTarget(1, array));
}
}