题目描述

题目分析

感觉这是一个放错标签的简单题。题目非常简单,思路应该很明确是二分,我很快写了一个(虽然不小心把!=打成==调试了一会)。

class Solution {public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if (target < matrix[0][0] || target > matrix.back().back()) return false;auto result = row_lower_bound(matrix, 0, matrix.size(), target);if (result.first) {int x = result.second;const auto &vec = matrix[x];return  lower_bound(vec.cbegin(), vec.cend(), target) != upper_bound(vec.cbegin(), vec.cend(), target);} else {return false;}}
private:pair<bool, int> row_lower_bound(vector<vector<int>> &matrix, int l, int r, int target) {;while (l < r) {int mid = (l + r) >> 1;if (target >= matrix[mid][0] && target <= matrix[mid].back()) return {true, mid};else if (target < matrix[mid][0]) r = mid;else l = mid + 1;}return {false, 0};}
};

但是当我看到题解的时候我觉得我对STL一无所知。虽然已经学习了lambda表达式,但是不太能够灵活运用。对于这种STL已经实现了的算法,有些细节可能不同,我们需要传递一个lambda表达式定制一下操作就可以了。

class Solution {public:bool searchMatrix(vector<vector<int>> matrix, int target) {auto row = upper_bound(matrix.begin(), matrix.end(), target, [](const int b, const vector<int> &a) {return b < a[0];});if (row == matrix.begin()) {return false;}--row;return binary_search(row->begin(), row->end(), target);}
};

题解还有另一种解法,是把二维数组看成一维的,虽然思路很好,但是复杂度应该是没什么变化的。一个是O(n)+O(m),一个是O(nm),而前者的可拓展性高一些

每日一题:leetcode74.搜索二维矩阵相关推荐

  1. leetcode刷题 74.搜索二维矩阵

    题目分析 这是一道简单的查找二维矩阵的题目,所以解决这题有一个最简单的解法就是遍历二维数组即可:但是我们应该注意到题目中的每行整数从左到右是按升序排列的,第一个整数大于前一行的最后一个整数,介于此,我 ...

  2. leetcode74. 搜索二维矩阵(二分查找)

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  3. leetcode74. 搜索二维矩阵 ,你见过吗

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  4. 力扣算法题—074搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  5. [Swift]LeetCode74. 搜索二维矩阵 | Search a 2D Matrix

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  6. Python每日一练(20230307) 重复DNA序列、搜索二维矩阵、买卖股票的最佳时机IV

    目录 1. 重复的DNA序列  ★★ 2. 搜索二维矩阵  ★★ 3. 买卖股票的最佳时机 IV  ★★★

  7. LeetCode Algorithm 240. 搜索二维矩阵 II

    240. 搜索二维矩阵 II Ideas 这题我记得在左神算法初级班里面有. 主要的思想就是定义两个指针row_index和col_index,从右上角开始逐个搜索. 如果matrix[row_ind ...

  8. python 搜索二维矩阵

    搜索二维矩阵 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:m ...

  9. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)

    文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...

最新文章

  1. Unsafe工具类的一些实用技巧,通往JVM底层的钥匙
  2. 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
  3. 用package.json配置NodeJS项目的模块声明
  4. 特斯拉:已在中国建立数据中心,以实现数据存储本地化
  5. 5、MySQL通用查询日志(General Query Log)
  6. 使用ASP.NET AJAX 1.0框架PreviewGlitz进行网页动画编程
  7. 一个备份MySQL数据库的简单Shell脚本(转)
  8. 与华为交换机用access_学校机房项目交换机的配置,理解这篇,交换机配置不再难...
  9. 计算机职称 计算机二级证,国家计算机二级证书含金量有多高
  10. Spring AOP失效之谜
  11. vs配置opencv
  12. 关于nagios监控系统添加主机和服务脚本
  13. uliso刻录系统到U盘
  14. 如何改变win10鼠标样式
  15. Nginx代理百度地图离线瓦片
  16. linux--磁盘配额
  17. 服务器装win7找不到硬盘驱动,Windows 7安装问题时找不到硬盘驱动器怎么办
  18. POS消费小票(签购单)上的“秘密”
  19. 平面几何----用梅涅劳斯定解20年一道高三数学模拟题
  20. 全国、省、市互联网普及率各区县电话用户数(2000至2020年)

热门文章

  1. 跳槽上班第一天的感受
  2. [python]-数据科学库Numpy学习
  3. Android学习拾遗
  4. [转]粵語固有辭彙與漢語北方話辭彙對照
  5. 【Unity】Update()和FixedUpdate()
  6. 计算机怎么查看U盘品牌,如何查看电脑u盘使用
  7. clistctrl控件最后插入在后面_老板让我把图片放到Excel表格中,批量插入效率高...
  8. php根据id查找条件怎么写_thinkphp where()条件查询
  9. linux查看进程运行日志文件,【Linux】常用指令、ps查看进程、kill杀进程、启动停止tomcat命令、查看日志、查看端口、find查找文件...
  10. oracle+trace参数设置,Oracle autotrace参数详解