题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列 都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一 个整数,判断数组中是否含有该整数。
思路:从右上角或左下角开始找,逐行排除,或者用二分法查找
本文采用左下方法0(m+n)
package Function;
//o(m+n) 0(1)
public class Find04 {
public boolean Find(int [][]matrix,int target) {
if(matrix==null)
return false;
//行数
int rows = matrix.length;
//列数
int cols = matrix[0].length;
int i = rows - 1, j = 0;
while (i > 0 && j < cols) {
//目标小,向上移行
if (target < matrix[i][j])
i--;
//目标大,向右移列
else if (target > matrix[i][j])
j++;
else
//相等
return true;
}
return false;
}
public static void main(String[] args) {
int [][]arr1=new int[][]{{1,2,8,9}, {2,4,9,12},{4,7,10,13},{6,8,11,15}};
int [][]arr2={};
Find04 p=new Find04();
boolean a =p.Find(arr1,8);
//查找值小于矩阵最小值
boolean b=p.Find(arr1,0);
//查找值大于矩阵最大值
boolean c=p.Find(arr1,16);
boolean d =p.Find(arr2,0);
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}