# 题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
# 测试用例
用例
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
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
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