Description
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
Solutions
对于左上角的元素
array[i][j] (其中
i=0; j=array[0].length),它下方的数值都比它大(就是说它所在列中是最大的),它左方的数值都比它小(就是说它所在行是最大的)。
首先将目标整数与左上角的元素对比,如果相等,那么它就是答案; 如果
目标整数大于左上角的元素,那么目标整数大于它一整行的数值,因此可以排除所在行,即i++; 如果目标整数小于左上角的元素,那么目标整数小于它一整列的数值,因此可以排除所在列,即j--;
重复上述过程,直到i==array.length或者j==-1; 最后由于找不到相等的,返回false
Code
public static boolean Find(int target, int[][] array) { if(array == null || array.length == 0 || array[0].length == 0 || array[0][0] > target){ return false; } // 定位左上角元素 int i=0; int j=array[0].length - 1; for(; i< array.length && j >= 0;){ if(target == array[i][j]){ return true; } else if(target < array[i][j]){ // 放弃所在列 j--; } else if(target > array[i][j]){ // 放弃所在行 i++; } } return false; }