LeetCode(74) Search a 2D Matrix
来源:互联网 发布:三季稻知乎 编辑:程序博客网 时间:2024/05/16 16:18
题目
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
分析
二分搜索算法在二维矩阵中的应用;
两次二分搜索:
第一次,二分搜索第一列(借助另一个数组)找出小于等于target的下标pos
第二次,二分搜索pos行,搜索target
AC代码
class Solution {public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.empty()) return false; int m = matrix.size(); //将矩阵首列,压入临时vector,寻找,目标元素所在的行 vector<int> v; for (int i = 0; i < m; i++) v.push_back(matrix[i][0]); //寻找 <=target 最近的元素下标 int pos = binarySearchPos(v, 0, m - 1, target); //不存在任何一行中 if (pos == -1) return false; else if(matrix[pos][0] == target) return true; else return binarySearch(matrix[pos], 0, matrix[pos].size() - 1, target); } int binarySearchPos(vector<int> &nums, int lhs, int rhs, int &target) { if (nums.empty()) return -1; while (lhs <= rhs) { int mid = (lhs + rhs) / 2; if (nums[mid] == target) return mid; else if (nums[mid] < target) { lhs = mid + 1; } else{ rhs = mid - 1; }//else }//while if (lhs < rhs && nums[lhs] < target) { return lhs; } else{ return lhs - 1; } } bool binarySearch(vector<int> &nums, int lhs, int rhs, int &target) { if (nums.empty()) return false; while (lhs <= rhs) { int mid = (lhs + rhs) / 2; if (nums[mid] == target) return true; else if (nums[mid] < target) { lhs = mid + 1; } else{ rhs = mid - 1; }//else }//while return false; }};
GitHub测试程序源码
0 0
- Leetcode 74 Search a 2D Matrix
- LeetCode 74: Search A 2D Matrix
- LeetCode 74 Search a 2D Matrix
- [leetcode 74] Search a 2D Matrix
- [LeetCode 74]Search a 2D Matrix
- leetcode || 74、Search a 2D Matrix
- leetcode-74 Search a 2D Matrix
- Leetcode[74]-Search a 2D Matrix
- 【Leetcode】Search a 2D Matrix #74
- LeetCode(74) Search a 2D Matrix
- Leetcode #74 Search a 2D Matrix
- Leetcode #74 Search a 2D Matrix
- leetcode 74: Search a 2D Matrix
- Leetcode#74||Search a 2D Matrix
- leetcode 74 : Search a 2D Matrix
- [Leetcode]#74 Search a 2D Matrix
- 【leetcode】【74】Search a 2D Matrix
- leetcode 74:Search a 2D Matrix
- Yii2.0 邮件配置
- PHP中文乱码的三个原因及解决方法
- 2199 Can you solve this equation?
- 南山南原版G调
- 《深入理解计算机系统》读书笔记6---各种echo服务器的实现
- LeetCode(74) Search a 2D Matrix
- 算法 学习
- ORM框架
- git常用命令
- hdu1711-Number Sequence-kmp基础 模式匹配
- 关于字节流,字符流及BufferedReader
- java-web 资料整理
- 如何在SpriteBuilder中使用BM Font Label
- 矩阵的特征向量与特征值的几何意义