BM18 二维数组中的查找
题目描述
给定一个每个元素都是升序数组的二维数组和一个target,判断target是否在数组中
返回boolean类型
思路分析
- 方法一: 遍历每个元素,判断是否相等
- 方法二:将数组拍平,也就是数组扁平化,之后在判断里面有没有该target
- 方法三:对每个子数组都是用二分查找法,去判断其中有没有
代码参考
const Find1 = function (target, array) {
for (let arr of array) {
for (let ar of arr) {
if (ar === target) return true
}
}
return false
}
const Find2 = function (target, array) {
// toString之后再做处理
// return array.toString().split(',').map(item => Number(item)).includes(target)
// 自带的flat方法
return array.flat().includes(target)
}
function Find (target, array) {
for (let arr of array) {
let len = arr.length
if (!len) {
// 如果子元素是个空元素,则直接跳过
continue
}
// 二分查找
let [left, right] = [0, len - 1]
while (left <= right) {
let mid = left + Math.floor((right - left) / 2)
if (target === arr[mid]) return true
else if (target < arr[mid]) right = right - 1
else left = left + 1
}
console.log('没有找到')
}
return false
}