LeetCode 74. 搜索二维矩阵(二分查找)
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. 搜索二维矩阵(二分查找)相关推荐
- leetcode 74. 搜索二维矩阵(二分)
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入:matrix = ...
- Leetcode 74. 搜索二维矩阵 (每日一题 20210907)
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性:每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数.示例 1:输入:matrix = [[ ...
- LeetCode 240. 搜索二维矩阵 II(二分查找 分治)
文章目录 1. 题目 2. 解题 2.1 从左下角或者右上角开始搜索 2.2 分治算法 1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以 ...
- leetcode刷题 74.搜索二维矩阵
题目分析 这是一道简单的查找二维矩阵的题目,所以解决这题有一个最简单的解法就是遍历二维数组即可:但是我们应该注意到题目中的每行整数从左到右是按升序排列的,第一个整数大于前一行的最后一个整数,介于此,我 ...
- 【leetcode】搜索二维矩阵 II
题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ma ...
- 【二分法万能模板】Leecode 74. 搜索二维矩阵——Leecode日常刷题系列
题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix/submissions/ 题解汇总:https://leetcode-cn.com/p ...
- [leetcode]240. 搜索二维矩阵 II
行.列二分: class Solution {public:bool binsearch(vector<vector<int>>& matrix, int target ...
- Leetcode 240.搜索二维矩阵II (每日一题 20210727 同一题)
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target .该矩阵具有以下特性:每行的元素从左到右升序排列. 每列的元素从上到下升序排列.示例 1:输入:matrix = ...
- LeetCode 240. 搜索二维矩阵
因为矩阵的行和列是排序的(分别从左到右和从上到下),所以在查看任何特定值时,我们可以修剪O(m)O(m)或O(n)O(n)元素. 算法: 首先,我们初始化一个指向矩阵左下角的 (row,col)(ro ...
最新文章
- 直接拿来用!最火的iOS开源项目
- Java程序员面试中的多线程问题1
- 复旦高等代数 I(17级)每周一题
- 阿里云实现putty私钥登录全过程
- Python学习(四) —— 编码
- android让文件按顺序列表,Java/Android 获取文件夹的文件列表(file.listFiles())并按名称排序,中文优先...
- 揭秘高德地图如何利用MaxCompute管理海量数据
- OpenCV入门及应用案例:手把手教你做DNN图像分类
- Nginx 配置实现web解析php代码 过程记录
- 北乐博客装饰分享CSS+HTML+js
- linux系统环境下压缩与解压缩
- 写一个自动阅读的方法(需要运用html和css和JavaScript)
- 修改注册表为当前用户和默认用户添加日文输入法
- ENVI基本操作之彩色合成
- sml基本语法(二)
- 【408】计算机统考科目知识整理
- 没及格,我猜这套华为软件测试面试题没几个人能及格
- MOS与三极管的控制使用简介
- 喜欢二次元的程序员,是如何宣泄的?看到他们的电脑桌面就知道了
- 巨坑:数据库查询有结果,而对应的实体类个别为null