【第四范式】真题-矩阵查数
题目描述
给定一个二维整型矩阵,已知矩阵的每一行都按照从小到大的顺序排列,每一列也都按照从小到大的顺序排列。现在给出一个数,请写一个函数返回该数是否存在于矩阵中。
矩阵中出现的数字与需要查找的数(k
)都为0~100000
之间的整数,且矩阵的大小在3000*3000
以内。
在保证正确性的基础上,请尽量给出比较高效的解法。请列出你的算法时间复杂度与空间复杂度分别是多少?
输入描述
输入两个整数m,n
, 且 0 < m ≤ 3000 0 < m \leq 3000 0<m≤3000, 0 < n ≤ 3000 0 < n \leq 3000 0<n≤3000。
接着输入一个vector<vector<int>> matrix
矩阵,大小为m
行n
列,与一个int k
,为需要查找的数字。
输出描述
输出true
或者false
,true
表示该数k
存在于该matrix
矩阵中,false
表示该数k
不存在于该matrix
矩阵中。
示例一
输入
3 3
2 3 5
3 4 7
3 5 8
4
输出
true
说明
4
位于矩阵的第二行第二列,故输出true
参考解题 C
#include <stdio.h>
#include <stdlib.h>
void displayMat(int **mat, int rows, int columns) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++)
printf("%d ", mat[i][j]);
printf("\n");
}
}
void echoInput(int **mat, int rows, int columns, int target) {
printf("%d × %d matrix:\n", rows, columns);
displayMat(mat, rows, columns);
printf("target: %d\n"