剑指Offer第一题:二维数组的二分查找
问题描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目分析
- 这个矩阵的特点是从左到右递增,从上到下递增,左上角的是最小,右下角的是最大
算法描述
- 用所查找的key值与最大值和最小值比较,如果所需查找的key值大于最大值或者小于最小值,那么不存在该值,直接返回false。
- 用key值与右上角的数值进行比较,如果key大于最右上角的值,那么该行没有key,查询指标应该向下跳一行;如果key小于最右上角的值,那么key可能存在在该行,列数向前-1
源代码
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int row=array.length; 4 int colums=array[0].length; 5 int row1=0; 6 int colums1=colums-1; 7 while(row1<row&&colums1>=0) { 8 if(array[row1][colums1]==target) { 9 return true; 10 }else if(array[row1][colums1]>target) { 11 --colums1; 12 }else { 13 ++row1; 14 } 15 } 16 return false; 17 } 18 }
运行截图

心得
刚开始拿到题目的时候我的想法就是矩阵的对角线入手根据对角线数据判断再对矩阵划分更多的矩阵来查找,但是遇到了很多问题,例如矩阵不规则的话那么对角线就没有了,然后自己有自己写函数填充矩阵,另外一个问题就是,如果矩阵足够大那么分的小矩阵会越多,会造成时间和空间上的极大浪费,在错误的方向越走越远....
ps:转载需要表明出处,本人菜鸡一枚,如果错误欢迎大家指正

浙公网安备 33010602011771号