BM18 二维数组中的查找

题目描述

给定一个每个元素都是升序数组的二维数组和一个target,判断target是否在数组中
返回boolean类型

思路分析

  1. 方法一: 遍历每个元素,判断是否相等
  2. 方法二:将数组拍平,也就是数组扁平化,之后在判断里面有没有该target
  3. 方法三:对每个子数组都是用二分查找法,去判断其中有没有

代码参考


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
}

posted @ 2022-12-31 14:45  含若飞  阅读(26)  评论(0编辑  收藏  举报