# 题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

# 测试用例

用例

matrix如下:

[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]
1
2
3
4
5
6
7
  • 给定 target = 5,返回 true
  • 给定 target = 20,返回 false

# 思路

与二维数组中的第一个元素比较,因为按行按列都是递增的,所以如果有target,那么taret一定大于等于array[i][0],所以这里就是一个剪枝,然后二维数组的每一行又是一个一维数组,利用一维数组的indexOf方法来判断target是否在该行,如果在的话直接返回true,这样一行查找结束,查找下一行,查找完所有行仍没有返回true,就返回false

# 代码实现

// 输入

var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;

console.log("请输入要查找的数target: ");
var target = Number(readline());

console.log("请输入二维数组的行: ");
let row = Number(readline());

console.log("请按行输入二维数组:");
var array = [];

for (let i = 0; i < row; i++) {
  let arr = readline().split(",").map(Number);
  array.push(arr);
}

console.log("array: ", array);

// 编写算法逻辑
// 查找二维数组

function find (target, array){
  for(let i = 0; i < array.length; i ++){
    if(array[i][0] <= target){
      if(array[i].includes(target)){
        return true;
      }
    }
  }
  return false;
}

let res = find(target, array);
console.log("结果为: ", res);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39