LeetCode---Search a 2D Matrix
2015-11-05 21:58
281 查看
题目大意:给出一个二维数组,数组中每一维的数从左到右一次递增,同时当每一维的首元素大于上一维的尾元素,判断数组中是否存在所给的目标数。
算法思想:
把二维数组看做是等分成了几段的一维数组,然后将其当成递增的一维数组进行二分搜索。
1.计算出二维数组的行数和列数,从而计算出数组中元素的个数。
2.为了方便计算中间元素行和列,这里搜索的左端初始为1,右端初始为数组中元素的个数。
3.先计算中间元素在一维数组中的位置,然后将其转化为行和列。
4.通过将中间元素和目标数比较逐渐缩小搜素范围,从而判断目标数是否在数组中。
代码如下:
算法思想:
把二维数组看做是等分成了几段的一维数组,然后将其当成递增的一维数组进行二分搜索。
1.计算出二维数组的行数和列数,从而计算出数组中元素的个数。
2.为了方便计算中间元素行和列,这里搜索的左端初始为1,右端初始为数组中元素的个数。
3.先计算中间元素在一维数组中的位置,然后将其转化为行和列。
4.通过将中间元素和目标数比较逐渐缩小搜素范围,从而判断目标数是否在数组中。
代码如下:
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(); if(m==0) return false; int n=matrix[0].size(); int left=1,right=m*n; int row=0,column=0; while(left<=right){ int mid=(left+right)/2; row=mid/n-1; column=mid%n; if(column==0) column=n-1; else{ ++row; --column; } if(target<matrix[row][column]) right=mid-1; else if(target>matrix[row][column]) left=mid+1; else return true; } return false; } };
相关文章推荐
- HDOJ 3371 Connect the Cities 【Prime】
- 如何设置修改WPS批注上的用户信息名称
- 检测文件(夹)大小
- [转]浅谈dijkstra堆优化
- UIView总结
- Ceph集群中如何摘除一个包含mon、osd和mds的节点
- 【Android开发—智能家居系列】(三):手机连接WIFI模块
- Android IOS WebRTC 音视频开发总结(五十)-- 技术服务如何定价?
- UIScrollView
- 【Xcode】【iOS-pod】The sandbox is not sync with the Podfile.lock
- JCenter下载太慢?教你修改Maven仓库地址为国内镜像
- 查找算法——找到序列中第二大的数(修正版)
- mac virtualBox 解决鼠标无法切换问题
- Android 布局样式和主题
- java中的时间判断
- “互联网+”创新创业计划书(二)
- Mybatis 源码分析--Configuration.xml配置文件加载到内存
- cJSON 库的使用和优化
- NSFileHandle&&NSFileManage
- 51nod 1435 位数阶乘 找规律