当前位置: 首页 > 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;
    }
};
http://www.dtcms.com/a/52330.html

相关文章:

  • 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数据集可视化
  • Libgdx游戏开发系列教程(6)——游戏暂停
  • 一文学会Spring
  • 模块和端口
  • Linux设备驱动开发之摄像头驱动移植(OV5640)
  • DeepSeek 角色设定与风格控制
  • threejs:着色器onBeforeCompile给导入的模型添加光带扫描效果
  • 运维实战---多种方式在Linux中部署并初始化MySQL
  • Java面试常见问题总结
  • socket基础学习以及java搭建
  • GaussianCity:实时生成城市级数字孪生基底的技术突破