1. 题目

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

示例 1:
输入:
matrix = [[1,   3,  5,  7],[10, 11, 16, 20],[23, 30, 34, 50]
]
target = 3
输出: true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 二分查找

参考 二分查找

  • 先在第一列二分查找比target小的最后一个数是谁
  • 在该行二分查找target
class Solution {public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()==0 || matrix[0].size() == 0)return false;//在第一列搜索最后一个比我小的int i, r = matrix.size(), c = matrix[0].size();int left = 0, right = r-1, mid;while(left <= right){mid = left + ((right-left)>>1);if(matrix[mid][0] == target)return true;if(matrix[mid][0] < target){if(mid == r-1 || matrix[mid+1][0] > target)break;//mid行搜索即可elseleft = mid+1;}elseright = mid-1;}int R = mid;left = 0, right = c-1;while(left <= right){mid = left + ((right-left)>>1);if(matrix[R][mid] == target)return true;if(matrix[R][mid] < target)     left = mid+1;elseright = mid-1;}return false;}
};
  • 转换成1维数组,即可变成标准二分查找
class Solution {public:bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()==0 || matrix[0].size() == 0)return false;int i, r = matrix.size(), c = matrix[0].size();// 二分查找int left = 0, right = r * c - 1;//关键点int mid, val;while (left <= right) {mid = (left + right) / 2;val = matrix[mid/c][mid%c];//关键地方if (target == val) return true;else {if (target < val) right = mid - 1;else left = mid + 1;}}return false;}
};

LeetCode 74. 搜索二维矩阵(二分查找)相关推荐

  1. leetcode 74. 搜索二维矩阵(二分)

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

  2. Leetcode 74. 搜索二维矩阵 (每日一题 20210907)

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

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

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

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

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

  5. 【leetcode】搜索二维矩阵 II

    题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ma ...

  6. 【二分法万能模板】Leecode 74. 搜索二维矩阵——Leecode日常刷题系列

    题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/submissions/ 题解汇总:https://leetcode-cn.com/p ...

  7. [leetcode]240. 搜索二维矩阵 II

    行.列二分: class Solution {public:bool binsearch(vector<vector<int>>& matrix, int target ...

  8. Leetcode 240.搜索二维矩阵II (每日一题 20210727 同一题)

    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target .该矩阵具有以下特性:每行的元素从左到右升序排列. 每列的元素从上到下升序排列.示例 1:输入:matrix = ...

  9. LeetCode 240. 搜索二维矩阵

    因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)O(m)或O(n)O(n)元素. 算法: 首先,我们初始化一个指向矩阵左下角的 (row,col)(ro ...

最新文章

  1. 直接拿来用!最火的iOS开源项目
  2. Java程序员面试中的多线程问题1
  3. 复旦高等代数 I(17级)每周一题
  4. 阿里云实现putty私钥登录全过程
  5. Python学习(四) —— 编码
  6. android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
  7. 揭秘高德地图如何利用MaxCompute管理海量数据
  8. OpenCV入门及应用案例:手把手教你做DNN图像分类
  9. Nginx 配置实现web解析php代码 过程记录
  10. 北乐博客装饰分享CSS+HTML+js
  11. linux系统环境下压缩与解压缩
  12. 写一个自动阅读的方法(需要运用html和css和JavaScript)
  13. 修改注册表为当前用户和默认用户添加日文输入法
  14. ENVI基本操作之彩色合成
  15. sml基本语法(二)
  16. 【408】计算机统考科目知识整理
  17. 没及格,我猜这套华为软件测试面试题没几个人能及格
  18. MOS与三极管的控制使用简介
  19. 喜欢二次元的程序员,是如何宣泄的?看到他们的电脑桌面就知道了
  20. 巨坑:数据库查询有结果,而对应的实体类个别为null

热门文章

  1. 包r语言_R语言入门之寻找你的R包
  2. 第一季5:Hi3518EV200的环境搭建
  3. linux内核的I2C子系统详解2——关键结构体、关键文件
  4. truffle unbox react 出坑指南
  5. 计算机的发展史及多道技术
  6. vim 常用快捷键总结
  7. 用户 'IIS APPPOOL\***' 登录失败(转载)
  8. SQL Server中行列转换 Pivot UnPivot
  9. 转:程序员每天该做的事
  10. UDT中select异常