题目:在一个二维数组中每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的数组和一个整数,判断数组中是否含有该整数。
思路:由于该二维数组从左到右,从上到下均为顺序递增的。因此右下角与左上角的数字均大于或小于其周围数字,如果选择改组作为起始点,则无法确定下一步的方向。而右上角的数字是同行最大值、同列最小值,选择该点为起始点则可以根据该数子与目标的比较确定下一步是向右移还是向下移,同理选择左下角也可以实现该函数。
这里选择右上角为起始点。
/** * Created by zj on 2017/3/11 0011. */ public class Find { static void find(int[][] arr,int key){ boolean found = false; if(arr != null){ int row = 0; int column = arr[0].length - 1; while(row <= arr.length - 1 && column >= 0){ if(key == arr[row][column]){ found = true; break; }else if(key > arr[row][column]){ row++; }else{ column--; } } } if(found){ System.out.print("array contains the key"); }else{ System.out.print("array doesn't contain the key"); } } public static void main(String[] args) { int[][] a = {{1,5,6},{7,8,9},{10,12,14}}; find(a,8); } }