package cn.dzp.flyroc.offer;
public class FindDemo {
/*题目描述:在一个二维数组中,每一行都按照从左到右的顺序递增排序,每一列都按照从上到下递增的顺序排序,
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数*/
//思路:从右上角开始查找,逐行删除,或者用二分法查找
//代码实现
public static void main(String[] args){
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
find(arr, 5);
}
public static boolean find(int[][] arr,int target){
//最大的元素为右下角元素,最小的元素为左上角元素
if (arr == null){ //判断这个二维数组是否为空
return false;
}
int row = 0; //定义第1行为开始查找的行
int col = arr[0].length-1; //定义每行的最后一个元素为开始查找的元素
while (row < arr.length && col >= 0){ //判断行数是否小于数组的长度,并且查找的元素的索引是否大于等于0
if (arr[row][col] == target){ //判断某一个元素是否为target
System.out.println(arr[row][col]+"这个元素存在:"+"在第"+row+"行"+"第"+col+"列");
return true;
}
if (arr[row][col] > target){ //判断某个元素是否大于target
col--; //向这一行的前一个元素查找
}else { //判断某个元素是否小于target
row++; //查找下一行
}
}
System.out.println(target+"这个元素不存在");
return false;
}
}