leetcode 240

题目的意思是,我们有一个矩阵,矩阵的行是单调递增的,列也是单调递增的,那么,我们需要判断 target 是否在这个矩阵里面,有点像是二分查找。假设全部遍历一遍,是 O(mn)O(mn)O(mn) 的时间复杂度,90000 好像还可以吧。题目要求高效的搜索算法,肯定不是这种。但是我不知道怎么搞。我试下这个全部搜索一遍的做法。确实也是可以通过,就像下面这个代码,有这个实力,应该也可以通过了。也就是说到时候机试应该是可以不爆零了。但是我感觉还是不稳。要是热门一百题刷透,我觉得我肯定是有均分的实力的。我必须毫无保留地相信自己呢。看了一下题解,可以用二分来做,也可以用一种奇怪的方法来做,奇怪的方法效率更高一些。从右上角往左下分析,确实非常高效地利用了这个性质,非常不错。就是,每次如果我们需要找的 target 更小,那么,肯定就是在左边。如果 target 更大,肯定就是在下面,遍历结束,肯定就是得到了一个确定的结果。至于为什么时间复杂度是 O(m+n)O(m+n)O(m+n) ,是因为,我们考虑极端的情况,不断左移,然后不断下移,都到达极限位置,级别上和 m+nm+nm+n 是一致的。二分的代码也不是那么困难。其实也还好呢。可以压行写,非常的简洁抽象,非常有意思。另外看过一个博主的观点,他认为一个题不断地摩擦和总结,最后就会引起质变,非常有意思。我非常认可。三元表达式非常炫技,我非常喜欢这种写法。看起来非常简洁。

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();
        for ( int i = 0; i < m; i++ ) {
            for ( int j = 0; j < n; j++ ) {
                if ( matrix[i][j] == target ) {
                    return true;
                }
            }
        }
        return false;
    }
};
cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if ( matrix.empty() || matrix[0].empty() ) {
            return false;
        }
        int m = matrix.size();
        int n = matrix[0].size();
        int row = 0; 
        int col = n - 1;
        while ( row < m && col >= 0 ) {
            if ( matrix[row][col] == target ) {
                return true;
            } else if ( matrix[row][col] > target ) {
                col--;
            } else if ( matrix[row][col] < target ) {
                row++;
            }
        }
        return false;
    }
};
cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        for ( auto& row: matrix ) {
            int left = 0;
            int right = row.size() - 1;
            while ( left <= right ) {
                int mid = left + ( right - left ) / 2;
                if ( row[mid] == target ) {
                    return true;
                } else if ( row[mid] < target ) {
                    left = mid + 1;
                } else {
                    right = mid - 1;
                }
            }
        }
        return false;
    }
};
cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int row = 0, col = matrix[0].size() - 1;
        while ( row < matrix.size() && col >= 0 ) {
            if ( matrix[row][col] == target ) {
                return 1;
            }
            matrix[row][col] > target ? col--: row++;
        }
        return 0;
    }
};

day 2

上午记了 40 单词。昨天晚上好饿,好想吃一些零食啥的,但是家里没有哈哈哈。看了一下玄幻小说,非常非常爽。这个放松方式不错。我下午记忆了 40 个单词。感觉,数学和专业课的复习也要提上日程。最近就是背单词和刷算法题,这样子还是差点儿意思呢。晚上学了 40 单词。好累啊。感觉是看电子屏幕时间太长了。另外除了看小说和散步,还有听孙燕姿的歌儿,尽量减少其他的娱乐活动。因为。一些非常现实的原因。前途真的渺茫了。有点儿。哈哈哈。

相关推荐
wenhaoran112 小时前
CF1800F Dasha and Nightmares
c++·算法·字符串·codeforces·位运算
We་ct2 小时前
LeetCode 149. 直线上最多的点数:题解深度剖析
前端·javascript·算法·leetcode·typescript
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.04.13 题目:1848.到目标元素的最小距离
笔记·算法·leetcode
Anycall.Q2 小时前
RULE (ICLR 2026)
算法
Tisfy2 小时前
LeetCode 1848.到目标元素的最小距离:数组遍历(附python一行版)
python·leetcode·题解·遍历
断眉的派大星2 小时前
数据结构——指针
数据结构·算法
Xpower 172 小时前
算法学习笔记 Day 1:迁移学习与域自适应(DANN/CORAL)
笔记·学习·算法
橘颂TA2 小时前
【笔试】算法的暴力美学——牛客 NC242:单词搜索,思路:dfs 算法
算法·深度优先
沐苏瑶3 小时前
Java据结构深度解析:AVL 树与红黑树
数据结构·算法