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

【LeetCode题解】LeetCode 240. 搜索二维矩阵 II

【题目链接】
240. 搜索二维矩阵 II
【题目描述】
在这里插入图片描述
在这里插入图片描述
【题解】

方法1:二分

由于矩阵matrix中每一行的元素都是升序排列的,因此我们可以对每一行都使用一次二分查找,判断target是否在该行中,从而判断target是否出现。
【AC代码】

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for(const auto& row : matrix) {int l = 0, r = row.size() - 1;while(l < r) {int mid = (l + r) / 2;if(row[mid] >= target)r = mid;elsel = mid + 1;}if(row[l] == target)return true;}return false;}
};

方法2:贪心

240. 搜索二维矩阵 II(贪心,清晰图解)

【思考&收获】
在第一次写的时候,外层循环写的是for(auto row : matrix),结果超出了内存限制。原因是for(auto row : matrix)这种写法会将matrix中的每一行复制到row变量中。对于每一行,C++会执行一次拷贝操作,把该行的数据复制到row变量。如果矩阵的每一行是一个大数组或较大的结构体,就会造成大量的内存开销,特别是在矩阵很大的情况下。如果矩阵中每一行非常大,或者矩阵本身非常大,那么这种拷贝操作可能导致内存不足,从而触发超出内存限制的错误。
在这里插入图片描述
for(const auto& row : matrix)中,row是对原行的常量引用。引用不会创建新的vector<int>对象,也不会复制任何元素,它只是一个 “别名”,指向matrix中已存在的行。这种方式不会额外分配内存来存储行数据,仅使用原矩阵占用的内存,因此内存使用量不会激增,也就不会出现内存超限的问题。

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

相关文章:

  • 2025图表制作完全指南:设计规范、工具选型与行业案例
  • sqli-labs通关笔记-第60关 GET字符型报错注入(双引号括号闭合 限制5次探测机会)
  • 打开或者安装Navicat时出现Missing required library libcurl.dll,126报错解决方法(libmysql_e.dll等)
  • Google Chrome V8 <14.1.58 越界写入漏洞
  • Shell 脚本条件测试
  • Chrome/360 浏览器扩展深度解析:内置扩展与普通扩展的实现机制对比
  • 智能求职推荐系统演示说明
  • 亚马逊长尾关键词发掘:从人工苦力到智能闭环的进化之路
  • 零成本加速:EdgeOne免费套餐3分钟接入指南
  • 15-day12LLM结构变化、位置编码和投机采样
  • 带宽评估(二)lossbase v1
  • 【音视频】GOP 的设置和分析
  • C++ 单例模式学习
  • Spark读取MySQL数据库表
  • CSS【详解】性能优化
  • 什么是区块链?从比特币到Web3的演进
  • 深入浅出集成学习:从理论到实战,解锁机器学习 “集体智慧”
  • 新的 SHAMOS MacOS 窃取程序利用单行终端命令攻击用户
  • OceanBase 分区裁剪(Partition Pruning)原理解读
  • python + unicorn + xgboost + pytorch 搭建机器学习训练平台遇到的问题
  • Spring Boot集成腾讯云人脸识别实现智能小区门禁系统
  • windows无法访问某个服务器共享文件夹
  • linux中ctype.h字符判断函数实现原理
  • linux中的iptables的简介与常用基础用法
  • springboot人事管理系统源码和论文
  • Python编程练习100例(含答案)
  • HTTP 与 HTTPS:网络通信幽径上的安全秘钥
  • Promise详解:Promise解决ajax回调嵌套问题
  • system\core\init\init.cpp----LoadBootScripts()解析init.rc(2)
  • 五大主流ETL数据集成平台推荐