每日一道算法Day18

120 阅读1分钟

题目描述:

image.png

解题思路:

  1. 暴力解决
return array.some((item) => item.some((num) => num === target));
// return array.flat().inclueds(target)
  1. 按照题目给的条件递增数组并且每个一维数组长度相等 先找一个对照值(矩阵中的左下角或者右上角, 这里我取的左下角), 与target进行对比, 若较大, 则往上继续对比, 若较小, 则往右侧进行对比, 直到索引越界, 中途有找到相等值, 直接返回true, 越界后返回false

代码如下:

  if (array.length === 0) return false;
 /**
   * [
   * [1, 3, 4, 5],
   * [2, 4, 6, 8],
   * [3, 6, 9, 11],
   * [4, 8, 12, 15],
   * [5, 10, 15, 16],
   * ]
   */
  //高
  const rowLen = array.length;
  //宽
  const colLen = array[0].length;
  //左下角
  let i = rowLen - 1;
  let j = 0;
  while (i >= 0 && j <= colLen - 1) {
    //当前值比 target小, 指针右移
    if (array[i][j] < target) j++;
    //当前值比 target 大, 指针上移
    else if (array[i][j] > target) i--;
    else if (array[i][j] === target) return true;
  }
  return false;