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

力扣 Hot 100 刷题记录 - 搜索二维矩阵 II

力扣 Hot 100 刷题记录 - 搜索二维矩阵 II(240)

题目描述

编写一个高效算法来搜索 m x n 矩阵中的目标值 target。该矩阵具有以下特性:

  • 每行元素 从左到右 升序排列
  • 每列元素 从上到下 升序排列

示例
输入: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

  • 如果 target = 5,返回 true
  • 如果 target = 20,返回 false

解题思路

方法一:二分查找

  • 思路:对每一行进行二分查找,时间复杂度为 O(m log n),其中 m 是行数,n 是列数。
  • 优点:实现简单。
  • 缺点:未充分利用矩阵的列有序特性。

方法二:Z 字形搜索

  • 思路:从矩阵的右上角(或左下角)开始搜索:
    • 如果当前值等于 target,返回 true
    • 如果当前值大于 target,向左移动一列。
    • 如果当前值小于 target,向下移动一行。
  • 时间复杂度O(m + n),其中 m 是行数,n 是列数。
  • 优点:充分利用矩阵的行列有序特性,效率更高。

代码实现

以下是 二分查找 的实现:

bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int n=matrix.size();
        int m=matrix[0].size();
        int i=0;
        while(i<n&&matrix[i][0]<=target){
            int l=0,r=m-1;
            while(l<r){
                int mid=(l+r)/2;
                if(matrix[i][mid]>=target) r=mid;
                else l=mid+1;
                
            }
             cout<<l<<" ";
            if(matrix[i][l]==target){
                return true;

            }
            else{
                i++;
            }
        }
        return false;
    }
};

相关文章:

  • VisActor/VTable - 自定义图标
  • 【大模型技术】LlamaFactory 的原理解析与应用
  • 专门为高速连续扫描设计的TDI工业相机
  • MATLAB仿真:涡旋光束光强和相位分布同时展示
  • golang深度学习-性能分析
  • Julia安装与Jupyter内核配置
  • 多线程-JUC
  • vue中Axios的封装和API接口的管理(待根据实际项目front进行分析)
  • Leetcode 57: 插入区间
  • 鸿蒙HarmonyOS评论功能小demo
  • 【Docker】容器安全之非root用户运行
  • C++ 中的随机数生成及其应用
  • Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)
  • Hive-数据倾斜优化
  • JetBrains学生申请
  • 【冗余路径——求边双连通分量】
  • 理解数学概念——稠密性(density)
  • 【前端基础】Day 9 PC端品优购项目
  • 洛谷P1334
  • cocodataset数据集可视化
  • 领证不用户口本,还需哪些材料?补领证件如何操作?七问七答
  • 巴基斯坦称对印精准打击造成设施损坏和人员伤亡
  • 网络主播直播泄机密,别让这些“小事”成威胁国家安全的“突破口”
  • 华泰柏瑞基金总经理韩勇因工作调整卸任,董事长贾波代为履职
  • 构建菌株有效降解有机污染物,上海交大科研成果登上《自然》
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁