剑指offer之二维数组中的查找 问题描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 问题分析: 二维数组的行与列都是按照递增排好序的,因此可以想到用二分法。但对于此题用一维数组的二分法行不通。因此找到如何进行二分的条件非常重要。 把二分值定在左下或右上是一个可行的方法(参考的是牛客上的解题方法)
public class Solution { public boolean Find(int target, int [][] array) { if(array.length == 0) return false; if(array[0].length == 0) return false; int c = array[0].length-1; int r = 0; while(c >= 0&& r <= (array.length-1)){ if(target > array[r][c])//目标数若比右上角的数大,说明该行的数都小了,向下移一行 r++; else if(target < array[r][c])//目标数若比右上角的数小,说明该列的数都大了,向左移一行 c--; else//相等,找到,返回true return true; } return false;//退出循环,没找到 } }