当前位置: 首页 > news >正文

【LeetCode240.搜索二维矩阵Ⅱ】以及变式

题目链接

240. 搜索二维矩阵 II - 力扣(LeetCode)

实现思路

  • 利用行有序、列有序的特点,可以从右上角或者左下角开始判断,以左下角为例,如果小于目标值就向右移动,也就排除了一列;如果大于目标值就向上移动,也就排除了一行。时间复杂度为O(m+n)。
    • 为什么不从左上角或者右下角判断呢,以右下角为例,如果小于目标值,这个矩阵的最大值小于目标值,说明肯定就找不到目标值,如果大于目标值,可以向左也可以向上,移动的方向不唯一。
  • (之前想的是每次遍历一行,然后二分找,但是这样时间复杂度是O(mlogn))。

代码实现

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) { int m = matrix.size();int n = matrix[0].size();int i = m - 1, j = 0;while (true) {if (matrix[i][j] > target) {i--;} else if (matrix[i][j] < target) {j++;} else {return true;}if (i == -1 || j == n) {return false;}}return false;}
};

变式

  • 如果存在重复元素,找最小下标呢?这里所说的最小下标指的是行优先,也就是i越小认为下标越小。
class Solution {
public:vector<int> searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size();int n = matrix[0].size();int i = 0, j = n - 1;while (true) {if (matrix[i][j] > target) {j--;} else if (matrix[i][j] < target) {i++;} else {int left = target + 1;if (j - 1 >= 0) {left = matrix[i][j - 1];}if (left == target) {j--;} else {return {i, j};}}if (i == m || j == -1) {break;}}return {-1, -1};}
};

http://www.xdnf.cn/news/1119493.html

相关文章:

  • iOS高级开发工程师面试——RunLoop
  • C++类模版与友元
  • 大数据领域开山鼻祖组件Hadoop核心架构设计
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GithubProfies(GitHub 个人资料)
  • 编译器 VS 解释器
  • 电脑升级Experience
  • Linux操作系统之信号:信号的产生
  • 【C++进阶】---- 多态
  • 鹧鸪云:别墅光储项目方案设计的最终选择
  • 【Linux系统】进程切换 | 进程调度——O(1)调度队列
  • Linux:3_基础开发⼯具
  • 【Linux】基本指令详解(一) 树状文件结构、家目录、绝对/相对路径、linux文件类型
  • 使用systemctl命令控制软件的启动和关闭
  • 打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑
  • 各种开发语言主要语法对比
  • Codeforces Round 1019 (Div. 2) A-D
  • GPU网络运维
  • UV vs Pip:Python 包管理的革命性进化
  • 【安卓笔记】进程和线程的基础知识
  • 实现高效、可靠的基于骨骼的人体姿态建模(第二章 基于三维人体姿态回归的语义图卷积网络)
  • 马蹄集 BD202401补给
  • Elasticsearch 9.x 升级变化
  • Swift 解 LeetCode 326:两种方法判断是否是 3 的幂,含循环与数学技巧
  • APK安装器(安卓端)一键解除VX限制!轻松安装各种手机应用
  • 一键获取android公钥/ios公钥工具
  • Java面试总结(经典题)(Java多线程)(一)
  • 基于Hadoop的竞赛网站日志数据分析与可视化(上)
  • 八、nginx搭建,实现vue跳转nginx跳转gateway
  • 基于hadoop的竞赛网站日志数据分析与可视化(下)
  • pycharm恢复出厂设置,可以解决大多数pycharm存在的问题