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

leetcode 74. Search a 2D Matrix

题目描述

要求时间复杂度必须是log(m*n)。那么对每一行分别执行二分查找就不符合要求,这种做法的时间复杂度是m*log(n)。

方法一,对每一行分别执行二分查找:

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++){if(binary_search(matrix[i],0,n-1,target))return true;}return false;}bool binary_search(vector<int> row,int left,int right,int target){int mid = 0;while(left <= right){mid = left + ((right-left)>1);if(row[mid] == target)return true;else if(row[mid] > target){right = mid-1;}else{left = mid+1;}}return false;}
};

 方法二,对整个矩阵执行二分查找,关键是要将整体的序号映射到行和列的下标:

时间复杂度log(m*n),符合要求。

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size();int n = matrix[0].size();int left = 0;int right = m*n-1;int mid = 0;int row = 0;int column = 0;while(left<=right){mid = left+((right-left)>>1);row = mid/n;column = mid%n;if(matrix[row][column] == target)return true;else if(matrix[row][column] > target){right = mid -1;}else{left = mid + 1;}}return false;}
};

http://www.dtcms.com/a/199589.html

相关文章:

  • 【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ
  • IDE 使用技巧与插件推荐
  • 力扣992做题笔记
  • SQL注入——Sqlmap工具使用
  • UA 编译和建模入门教程(zhanzhi学习笔记)
  • LLM最后怎么输出值 解码语言模型:从权重到概率的奥秘
  • 手机怎么查看网络ip地址?安卓/iOS设备查询指南
  • 【QT】类A和类B共用类C
  • python实现pdf转图片(针对每一页)
  • React Contxt详解
  • 【计算机主板架构】ITX架构
  • 企业标准信息公共服务平台已开放标准通编辑器访问入口
  • 苹果的人工智能领域慢热
  • 计算机视觉设计开发工程师学习路线
  • 展锐Android14及更新版本split_build编译方法
  • 【android bluetooth 协议分析 01】【HCI 层介绍 9】【ReadLocalSupportedCommands命令介绍】
  • C语言实现android/linux按键模拟
  • Linux动静态库制作与原理
  • 汇编:电子计数器
  • Linux问题排查-找到偷偷写文件的进程
  • 服务器的基础知识
  • 软件设计师完整性约束考点分析——求三连
  • AIGC与文本生成:人工智能写作的新纪元
  • Go语言测试用例的执行与分析
  • Git基础面试题
  • 【大模型面试每日一题】Day 23:如何设计一个支持多模态(文本+图像)的大模型架构?
  • Hadoop中 8020、9000、50070 端口用途的详细对比
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(下)
  • mariadb 升级 (通过yum)
  • Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!