【hot100】刷题记录(11)-搜索二维矩阵 II

题目描述:

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= n, m <= 300
  • -109 <= matrix[i][j] <= 109
  • 每行的所有元素从左到右升序排列
  • 每列的所有元素从上到下升序排列
  • -109 <= target <= 109

我的作答:

【hot100】刷题记录(9)-螺旋矩阵 的思路很像,都是分别循环行和列;本题的思路是因为元素是越往右和往下变大,所以从最右边和最下面开始遍历,从外往内推;

需要注意的是m和n有大小区分

python 复制代码
class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        if not matrix and target: return False
        if not matrix and not target: return True
        starti, startj = 0, 0
        offset = 1
        m, n = len(matrix), len(matrix[0])
        while starti<=m-offset and startj<=n-offset:
            for i in range(starti, m-offset+1): #检查每行最后一个元素
                if matrix[i][n-offset]<target:
                    starti = i+1
                elif matrix[i][n-offset]==target:
                    return True
                else: break    
            for j in range(startj, n-offset+1): #检查每列最后一个元素
                if matrix[m-offset][j]<target:
                    startj = j+1
                elif matrix[m-offset][j]==target:
                   return True 
                else: break  
            offset += 1
        return False

参考:

python 复制代码
class Solution(object):
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        return target in chain(*matrix)

chain(*matrix)itertools.chain 函数的一个用法,它用于将多个可迭代对象连接成一个长的可迭代对象。target in chain(*matrix) 的意思是检查 target 是否存在于 matrix 中的任何一个元素中。

就是先把二维数组展平成一维数组,再查找。*matrix是把每一行的列表拼起来[[1,2] [2,3]]然后chain()是变成[1,2, 2, 3]接着查找。。。

相关推荐
成都易yisdong5 小时前
高程异常计算器:一款集成Geoid、重力场与地磁场的专业工具
算法
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【反悔贪心】:种树
c++·算法·贪心·反悔贪心·csp·信奥赛·种树
南宫萧幕5 小时前
基于 PSO 的 HEV 能量管理策略:从联合仿真建模到排错实战
开发语言·python·算法·matlab·控制
生物信息与育种5 小时前
全基因组重测序及群体遗传与进化分析技术服务指南
人工智能·深度学习·算法·数据分析·r语言
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第23题:ConcurrentHashMap的底层原理是什么
java·开发语言·算法·哈希算法·散列表·hash
葳_人生_蕤5 小时前
hot100——回溯和DFS、BFS
算法·深度优先
Eloudy5 小时前
Steane码的稳定子的生成元集计算过程
算法
MegaDataFlowers5 小时前
快速算法验证流水线
算法
Aaron15886 小时前
27DR/47DR/67DR技术对比及应用分析
人工智能·算法·fpga开发·硬件架构·硬件工程·信息与通信·基带工程
alphaTao6 小时前
LeetCode 每日一题 2026/4/27-2026/5/3
算法·leetcode