70.二维数组中的查找
2022-03-02 本文已影响0人
wo不是黄蓉
day17: 剑指 Offer 04. 二维数组中的查找(中等)
思路:
- 遍历二维数组,使用二分法进行查找目标元素
- 官方:线性查找。利用二维数组中数据是升序特征,判断每一个数组中的最值是否等于当前元素。
如果当前行的最大值都不相等,则判断大于还是小于target,大于target则说明当前行中不存在目标元素,移动到下一行;
小于target则说明当前行中可能存在目标元素,当前行的指针往左移动;
第一种:
var findNumberIn2DArray = function (matrix, target) {
//遍历每个数组,二分法查找元素
for (let i = 0; i < matrix.length; i++) {
let tempArr = matrix[i];
console.log(tempArr);
if (hasTarget(tempArr, target)) {
return true;
}
}
return false;
};
//查找目标元素-二分法
hasTarget = function (arr, target) {
let l = 0,
r = arr.length - 1;
while (l <= r) {
mid = (l + r) >>> 1;
if (target > arr[mid]) {
l = mid + 1;
} else if (target < arr[mid]) {
r = mid - 1;
} else {
return true;
}
}
return false;
};
第二种:
var findNumberIn2DArray1 = function (matrix, target) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return false;
}
let rows = matrix.length,
cloumns = matrix[0].length,
row = 0,
cloumn = cloumns - 1;
while (row < rows && cloumn >= 0) {
//获取到每一行的最后一个元素
let num = matrix[row][cloumn];
if (num === target) {
return true;
} else if (num > target) {
//向左移动
cloumn--;
} else {
//向下移动
row++;
}
}
return false;
};