LeetCode搜索二维矩阵 II

240. 搜索二维矩阵 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

示例 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

思路:

  这道题给的二维矩阵,根据题目只知道他每一行,每一列都是升序排列的。并没有告诉具体的数据是怎么生成的,初次看好像无从下手。

  不过对于这一题我们有结论性地小技巧。假如从第一个位置(左上角)开始查找,往下,往右都是会增加的,完全不知道往哪里走。同样,如果从右下角开始找,往上、往左都是递减的,我们也毫无头绪。

  但是我们转变一下思路,从左下角,或者右上角去找,就容易多了。比如从左下角开始找,如果当前位置的值如果小于目标值,那我们就向右移动;如果当前位置值大于目标值,我们就向上移动,这样一来,我们就可以从左下角的位置逐步逼近直至找到目标值啦。

代码:

class Solution(object):

    def searchMatrix(self, matrix, target):

        m = len(matrix)#得到二维矩阵的长和宽

        n = len(matrix[0])

        now=0#定义变量now

        i = m-1#(i,j)是当前位置,初始化微(m-1,0)

        j=0

        while 1:#直接写while 1即可,反正后面要么返回True要么返回False

            now = matrix[i][j]#获取当前位置的值

            if now==target:#如果找到了

                return True#返回True

            if now<target:#如果小于目标值,向右移动,j+1

                j+=1

            elif now>target:#如果大于目标值,向上移动 i-1

                i-=1

            if i<0 or j>=n:#位置调整后,如果越界了,证明找不到,返回False

                return False

小结:

  这一题只要记住得从左下角开始寻找就好。同时要注意判断查找的边界。如果二维数组中有目标值,按照这个方法是肯定能找到数据的(可以写写画画来模拟一下,只要目标值存在,肯定会慢慢逼近直到到达的)。假如我们的位置越界了,就说明就是找不到,放心地return False就好。

posted @   JunanP  阅读(5)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示