LeetCode搜索二维矩阵 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就好。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了