Search a 2D Matrix
来源:互联网 发布:财务流程优化 编辑:程序博客网 时间:2024/05/16 07:44
class Solution {public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int rowNum = insertPosition(matrix, target); if(rowNum == -1) return true; else return search(matrix, target, rowNum); } int insertPosition(vector<vector<int> > &matrix, int target) { int rows = matrix.size(); int left = 0; int right = rows - 1; while(left <= right) { int middle = left + ((right - left)>>1); if(matrix[middle][0] == target) return -1; else if(target < matrix[middle][0]) right = middle - 1; else left = middle + 1; } if(right < 0) return 0; return right; } bool search(vector<vector<int> > &matrix, int target, int rowNum) { int cols = matrix[0].size(); int left = 0; int right = cols - 1; while(left <= right) { int middle = left + ((right - left)>>1); if(target < matrix[rowNum][middle]) right = middle - 1; else if(target > matrix[rowNum][middle]) left = middle + 1; else return true; } return false; }};
根据题意很自然的想到在纵向和横向分别使用二分查找,其中
纵向查找行号时,在没有找到元素时,需要找到比target小的最大数,也就是
其所在的行就是target有可能存在的行。另外要注意,函数insertPosition()中返回的
right,根据二分查找的规律来看就是要求的值,但对于right越界的情况需要单独处理
1 0
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D Matrix
- Search a 2D matrix
- Search a 2D matrix
- sqlserver数据导入mysql七: 对mysql和sqlsever同一张表中的数据进行统计对比
- BZOJ 树链剖分 1036: [ZJOI2008]树的统计Count
- intellij idea 13 keyGen
- JavaScript 页面跳转后台的几种方法
- JQuery validate 验证后提交
- Search a 2D Matrix
- OpenCV实现静止背景下运动目标的检测
- linux:服务器代理squid安装配置
- BigDecimal的介绍1
- 关于电脑方面的几个问题?
- 什么是DSP? DSP、单片机MCU、嵌入式微处理器的区别
- 机械工业发展临多重挑战尚未脱离险境
- Hadoop 2.0 NameNode HA和Federation实践
- 【SAS系列】select语句——完成elseif或者switch的功能