剑指offer---java练习篇(1)

因找工作,最近练习剑指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;
			
	}  

}



你可能感兴趣的:(算法)