3. 二维数组中的查找
2015-08-20 16:18
246 查看
参考:二分查找方法
如果我们从左上角开始查找,那么当查找元素比左上元素大时,无法判断是应该向下、向右还是向右下;从右下也是同理。
但是如果我们从右上角开始查找,当查找元素比右上元素大时,那么第一行淘汰,只能向下;当查找元素比右上元素小时,那么最后一列淘汰,只能向左;从左下角也是同理。
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析
方法一:剑指offer中提供的方法如果我们从左上角开始查找,那么当查找元素比左上元素大时,无法判断是应该向下、向右还是向右下;从右下也是同理。
但是如果我们从右上角开始查找,当查找元素比右上元素大时,那么第一行淘汰,只能向下;当查找元素比右上元素小时,那么最后一列淘汰,只能向左;从左下角也是同理。
实现
bool Find(int* matrix, int rows, int columns, int number){ bool found = false; //传参是否有效 if(matrix==NULL || rows<=0 || columns<=0) return found; ////从二维数组的左上角开始 //int row = 0; //int column = columns - 1; //while(row<rows && column>=0){ // int index = row * columns + column; // if(matrix[index]==number){ // found = true; // break; // }else if(matrix[index] < number){ // row++; // }else{ // column--; // } //} //return found; //从二维数组的右下角开始 int row = rows-1; int column = 0; while(row>=0 && column<columns){ int index = row * columns + column; if(matrix[index] == number){ found = true; break; }else if(matrix[index] < number){ column++; }else{ row--; } } return found; }
相关文章推荐
- [leetcode] 155.Min Stack
- MFC对话框控件数据提取之DoDataExchange()
- perl 切换cpan
- 图像插值方法
- 第五课 生成学习算法
- java使用ffmpeg和mencoder做视频格式转换
- 第五课 生成学习算法
- 学习使用:before和:after伪元素
- 虚拟化--[搭建]VSAN
- 黑马程序员——面向对象
- wps文档漫游 如何设置缺省不打开
- 结合Apache和Tomcat实现集群和负载均衡
- How To Configure Expense Report Numbers? 客户化费用报表编号
- C++中的 Round(),floor(),ceil()
- parentsUntil([expr|element][,filter])
- cocos2dx 3.0 环境搭建
- DOM(一)-06-(Location对象)
- 进职场记(一)--下山
- css多栏自适应布局
- javascript 事件 第23节