二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增都顺序排序请完成一个函数,输入一个二维数组和
一个整数并判断该数组是否包含该整数
例:int [][] nums = new int[][]{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
已知每行从左到右升序,从上到下升序,因此每次选取右上角的值m来与目标值做比较,目标值大于m,则行数加1,小于m,则列数减1;直至匹配到目标数字,默认返回值为false,上代码。
public static boolean findNum(int [][]nums,int target){
//常规判空
if(nums==null || nums.length ==0){
return false;
}
//最大值下标
int rows = nums.length-1;
int cols = nums[0].length-1;
//目标值如果小于数组最小值或者大于数组最大值,则数组不包含该数字
if(nums[0][0]>target || nums[rows][cols]< target){
return false;
}
int row=0;
int col = nums[0].length-1;
//行和列均在数组范围内
while(row <=rows && col>=0){
if(nums[row][col]==target){
return true;
}
if(nums[row][col]<target){
//行加1
row++;
}else{
//列减1
col--;
}
}
return false;
}