日拱算法:搜索二维矩阵 II

Posted 掘金安东尼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日拱算法:搜索二维矩阵 II相关的知识,希望对你有一定的参考价值。

题:

编写一个高效的算法来搜索 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

日拱算法:搜索二维矩阵

输入: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

解:

此题要利用到【每行的元素从左到右升序排列。 每列的元素从上到下升序排列】这个关键的题干信息。

咱就是说,只要是查找目标值,有了排序,都会方便许多。

思路:从矩阵的右上角(或左下角)的值开始比较;

比如:从矩阵右上角的值开始找,那就是第一行的最后一个数字;

  1. 如果目标值刚好等于右上角的值,则返回输出;
  2. 如果目标值小于右上角值,则目标值肯定是在同一行的左边去找;
  3. 如果目标值大于右上角的值,则到下一行去找;
var searchMatrix = function(matrix, target) 
let col = matrix[0].length - 1;//列
let row = 0;//行

while (col >= 0 && row <= matrix.length - 1)
if (target == matrix[row][col])
//如果找到就直接返回
return true;
else if (target < matrix[row][col])
//目标值小于右上角值,下一步往左找
col--;
else if (target > matrix[row][col])
//目标值大于右上角值,下一步往下找
row++;


return false;
;

那么,相应的,从左下角,找的思路就是反过来的,不做赘述:

var searchMatrix = function(matrix, target) 
let col = 0, row = matrix.length - 1;
while(row >= 0 && col < matrix[0].length)
if(target > matrix[row][col])
col++;
else if(target < matrix[row][col])
row--;
else
return true;


return false;
;

日拱算法:搜索二维矩阵


OK,以上便是本篇分享。点赞关注评论,为好文助力

以上是关于日拱算法:搜索二维矩阵 II的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 240.搜索二维矩阵II

240. 搜索二维矩阵 II

240. 搜索二维矩阵 II 的三种解法

Leetcode 搜索二维矩阵 II

240. 搜索二维矩阵 II

LeetCode-数组搜索二维矩阵 II