力扣刷题Day 46:搜索二维矩阵 II(240)

1.题目描述

2.思路

方法1:分别找到搜索矩阵的右、下边界,然后从[0][0]位置开始遍历这部分矩阵搜索目标值。

方法2:学习Krahets佬的思路,从搜索矩阵的左下角开始遍历,matrix[i][j] > target时消去第i行,matrix[i][j] < target时消去第j列。

3.代码(Python3)

方法1:

复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        if matrix[0][0] > target:
            return False
        m, n = len(matrix), len(matrix[0])
        bottom, right = m, n
        for k in range(m):
            if matrix[k][0] > target:
                bottom = k
                break
        for k in range(n):
            if matrix[0][k] > target:
                right = k
                break
        for i in range(bottom):
            for j in range(right):
                if matrix[i][j] == target:
                    return True
        return False

方法2:

复制代码
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        i, j = len(matrix) - 1, 0
        while i >= 0 and j < len(matrix[0]):
            if matrix[i][j] > target: i -= 1
            elif matrix[i][j] < target: j += 1
            else: return True
        return False

4.执行情况

方法1:

方法2:

5.感想

今天好困,脑子不清醒,感觉我的方法1应该还可以优化的但实在没精力了。

相关推荐
灵感__idea6 小时前
Hello 算法:贪心的世界
前端·javascript·算法
澈2077 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202428 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_8 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi8 小时前
前缀和差分
算法·图论
代码旅人ing8 小时前
链表算法刷题指南
数据结构·算法·链表
Yungoal8 小时前
常见 时间复杂度计算
c++·算法
6Hzlia8 小时前
【Hot 100 刷题计划】 LeetCode 48. 旋转图像 | C++ 矩阵变换题解
c++·leetcode·矩阵
不爱吃炸鸡柳9 小时前
单链表专题(完整代码版)
数据结构·算法·链表
CylMK10 小时前
题解:AT_abc382_d [ABC382D] Keep Distance
算法