因找工作,最近练习剑指offer上练习题。为节省时间,主要是看书上解题思路跟牛客网通过代码,现整理如下(如果思路整理不能帮你很好理解,建议阅读原书《剑指offer》,这里只是记录自己学习过程):
一、二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
针对这种比较抽象题目,最好是举一个实例,一步步分析,最终找到解题规律。根据题目说明,从左往右,从上往下,依次递增。假设要查找数为target,我们首先选取二维数组最右上角数字,与我们target进行比较,若大于它,则删除该行,因为行是自上而下递增,第一个数都大于target,该行其余数字也应该大于它。若右上角数字小于target,则删除该行,因为行自左向右是递增的,最大数字都小于它,该行其余数字也应该小于target。直到找到我么目标数字即target。
java代码:
package jianzhi_offer;
public class FindArray {
public boolean Find(int [][] arr, int target){
int row = 0;
int col = arr[0].length-1;
while(row <= arr.length-1 && col >= 0){
if(target == arr[row][col])
return true;
else if(target > arr[row][col])
row++;
else
col--;
}
return false;
}
}