题目
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二分法
K神做法:
package Day20;
/**
* 剑指 Offer 04. 二维数组中的查找
* @Author laimouren
* @Date 2021/12/11 20:09
*/
public class Solution4 {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i = matrix.length - 1, j = 0;
while(i >= 0 && j < matrix[0].length)
{
if(matrix[i][j] > target){
i--;
}
else if(matrix[i][j] < target){
j++;
}
else{
return true;
}
}
return false;
}
}
自己做法:
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int index;
for (int i = 0; i < matrix.length; i++) {
if (matrix[i].length == 0 || matrix[i][0] > target){
return false;
}
else {
index = binarySearch(matrix[i], target);
}
if(index >= 0 && index <matrix[i].length
&& matrix[i][index] == target){
return true;
}
}
return false;
}
public int binarySearch(int[] nums,int target){
int l = 0,r = nums.length-1;
int m;
while (l <= r){
m = l + (r-l)/2;
if (nums[m] == target){
return m;
}else if(nums[m] > target){
r = m-1;
}else {
l = m+1;
}
}
return l;
}
}