剑指offer第二版面试题3:二维数组中的查找(JAVA版)
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
思路:每次取右上角的一个数字(该例子中取9),如果9大于要找的数字则排除9的那列,否则派出9 的那行
public class Test3 { //arr为要查找数字的数组,num为要查找的数字 public static boolean find(int[][] arr,int num){ boolean flag=false; if(arr!=null && arr.length!=0){ int cols=arr.length;//列数 int rows=arr.length;//行数 //当前行和当前列(第一次为最后一个元素) int row=0; int col=cols-1; while(row<=rows-1 && col>=0){ // 比较二维数组中元素与number的关系 if(arr[row][col]==num){ flag=true; break; }else if(arr[row][col]>num){ col--; }else{ row++; } } } return flag; } public static void main(String[] args) { // 测试用例 int array[][] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } }; boolean flag = find(array, 1); System.out.println(flag); } }