题目描述:在一个二维数组中,每一行都按照从左到右的递增顺序排序,每一列都按照从上到下的顺序排序,请完成一个函数,输入这样一个二位数组和一个整数,判断数组中是否有该整数。
思路:充分考虑到该数组行与列递增的特性。
首先选择数组中右上角的数字,如果该数字等于要查的数字,查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。
算法如下:
package SwordOffer;
/**
* Created by L_kanglin on 2017/3/13.
*/
public class Test1 {
public static boolean Find(int target,int [][] array){
//二维数组的行
int rows =array.length;
//二维数组的列
int columns=array[0].length;
boolean Flag=false;
if(array.length!=0 &&rows>0&&columns>0){
int row=0;
int column=columns-1;
//注意这个循环的时机
while(row<rows&&column>=0){
System.out.println("查找前 "+array[row][column]);
if(array[row][column]==target){
Flag=true;
break;
}
else if(array[row][column]>target){
--column;
}
else{
++row;
}
System.out.println("查找后 "+array[row][column]);
}
}
return Flag;
}
public static void main(String [] args){
//二维数组的初始化
int [][] num = new int[][]{{0, 1, 2, 3},{4, 5, 6, 7} , {8, 9, 10, 11},{12, 13, 14, 15} };
int target=4;
System.out.println(Find(4,num));
}
}
运行结果如下:
查找前 3
查找后 7
查找前 7
查找后 6
查找前 6
查找后 5
查找前 5
查找后 4
查找前 4
true