行元素从小到大递增,列元素从小到大递增的数组查找算法
来源:互联网 发布:nginx高可用 编辑:程序博客网 时间:2024/05/10 05:21
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
考点:这道题主要是要利用好所给的两个条件,行递增和列递增,将肯定不合适的数据排除在外,将要遍历的数据尽可能的减少。
数组例子如下:
128924912471013681115
解决一个复杂的问题时,最有效的办法就是从具体的问题入手分析。
通过观察可知,
1.列最开头如果大于要查找的数,那么要查找的数不可能在那一列,可以直接剪枝掉那一列;
结果如下:
12244768
2.通过剪枝列之后,可以发现,行最末尾的数如果小于要查找的数,那么要查找的数肯定也不在那一行;
结果如下:
4768
3.这样数据就剪成最少的可能的数量,然后再对这些数据进行遍历查找,就可以了。
代码如下:
<?php/*$data 数组$number 查找的数$rows 数组的行数$columns 数组的列数*/function inArray($data,$number,$rows,$columns){$row=0;$column=$columns-1;$first=true;while($row<$rows&&$column>=0){if($data[$row][$column]>$number&&$first){$column--;//echo $column.',';}if($data[$row][$column]<$number){$first=false;$row++;//echo $row.',';//如果查找的数大于数组中的所有元素,那么就遍历完所有的行后退出//continue是防止这种情况的出现,会和第四个条件冲突continue;}if($data[$row][$column]==$number){return true;}if($data[$row][$column]>$number&&!$first){break;}}for($i=$row;$i<$rows;$i++){for($j=0;$j<$column;$j++){if($data[$i][$j]==$number){return true;}}}return false;}$a=array(array(1,2,8,9),array(2,4,9,12),array(4,7,10,13),array(6,8,11,15));var_dump(inArray($a,7,4,4));var_dump(inArray($a,101,4,4));
0 0
- 行元素从小到大递增,列元素从小到大递增的数组查找算法
- 行递增,列递增二位数组,找某个元素
- 递增数组元素的折半查找
- 从行,列均为递增的二维数组中查找给定元素
- 行递增、列递增的二维数组中查找
- [算法]行列递增数组中查找某个元素
- 行列均递增的二维数组元素查找
- 行列均递增的二维数组中查找元素
- (4)按从小到大的顺序排列数组中的元素
- 用python实现将数组元素按从小到大的顺序排列
- 行、列递增的二维数组数字查找
- 一个数组的值先从小到大递增后从大到小递减,找出最大的值
- 一个数组的值先从小到大递增后从大到小递减,找出最大的值
- 一个数组的值先从小到大递增后从大到小递减,找出最大的值 .
- 一个数组的值先从小到大递增后从大到小递减,找出最大的值
- 在部分递增和部分递减的数组中查找某个元素
- 循环递增链表中查找元素位置
- 【算法】选择排序(从小到大) 排序范围(0~n-1) n为数组元素个数
- android条码系统直接打印出库单笔记
- POJ 1256:Anagram
- Deep Learning(深度学习)学习笔记整理系列之(四)
- char*,const char*和string的相互转换
- Objective-C中的hasPrefix
- 行元素从小到大递增,列元素从小到大递增的数组查找算法
- MyEclipse2014安装反编译插件
- rails 后台创建Excel(导出数据库中的表结构)
- Touch 分发机制
- Deep Learning(深度学习)学习笔记整理系列之(五)
- 今天面试的一点心得
- 个人笔记小记,about network of android
- Java collection
- 学习日记-C语言结构体(struct)