二维数组中的查找
- 来源于《剑指offer》牛客网
1. 题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如:输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]];返回值 true
2. 解题思路
1)这个问题的重点就是利用好每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序这个条件
2)每一行、每一列都是有序的,所以可以对每一行或者每一列进行二分查找
3)根据条件不难看出,必须利用二维数组中元素值在列、行中的大小关系,调整遍历的位置,从而解决高效地解决这个问题
3. 代码实现
3.1 使用二分查找法逐行查找目标值
- 对每行或者每列就行列次或行次二分查找,时间复杂度为(O(nlogm),列数为n,行数为m)
- 使用二分查找只利用了行信息或者列信息,没有把行信息与列信息一并使用起来
public boolean Find(int target, int [][]array) {
//1.对二维数组的行进行遍历
int row = array.length;
for (int i = 0; i < row; i++) {
//2.使用二分查找找出一行中是否存在目标值,如果找到返回true
if (midFind(tar