不管全世界所有人怎么说,我都认为自己的感受才是正确的。无论别人怎么看,我绝不打乱自己的节奏。喜欢的事自然可以坚持,不喜欢的怎么也长久不了。
LeetCode:原题地址
题目要求
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。 每列的元素从上到下升序排列。
示例 1:
输入: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]], target = 5
输出:true
示例 2:
输入: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]], target = 20
输出:false
思路
- 矩阵已经排好序了
- 左下角的位置特殊:上面的比它小,右边的比它大
- 选取左下角的位置开始遍历,如果当前数大了,上移一行;当前数小了,右移一列
- 找到返回true,遍历完返回false
const searchMatrix = (matrix, target) => {
// 矩阵的行、列
const [m, n] = [matrix.length, matrix[0].length];
// (i,j)初始位置在左下角
let [i, j] = [m - 1, 0];
while (i >= 0 && j < n) {
const item = matrix[i][j];
if (item > target) {
// 太大了,上移一行
i--;
} else if (item < target) {
// 太小了,右移一列
j++;
} else {
// 找到,返回true
return true;
}
}
// 遍历完没找到,返回false
return false;
};