【剑指Offer学习】【面试题:二维数组中的查找】PHP实现
最近一直看剑指Offer、里面很多算法题。于是就想着用PHP来显示一下。
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
拿到这个题目。我们第一个反应,就是遍历二维数组。然后逐个进行比较。我们不难用PHP进行实现。于是有了下面的代码
 function TwoArrayFind($array,$search) {
     $found = false;
     if(empty($array) || !is_array($array) || empty($search)) {
         return $found;
     }
     $rows = count($array); //行数
     $cols = count($array[0]); //列数
     for ($i=0; $i < $rows ; $i++) {
         for ($j=0; $j < $cols ; $j++) {
             if($array[$i][$j] == $search) {
                 $found = true;
                 break 2;//跳出两层循环
             }
         }
     }
     return $found;
 }
但是这个算法的实现的复杂度是O(n^2),于是我们可以通过其他的方法。来简化。
二维数组的构造就是类似下图。

我们选择一个参考点,来逐次减少查询的行数和列数。
观察发现。每行都是从左到右递增,从上往下递增。

假设我们要查找13.我们选择右上角的5作为参考点。要查询的数字大于5.可以把当前行,全部排除
我们如果查询是3.选择5作为参考点,3小于5,可以排除5所在的列。一次就踢掉了很多的元素。

通过每次这样的判断。我们减少了很多数字的比较。PHP代码实现如下
function TwoArrayFind($array,$search)
{
$found = false; if(empty($array) || !is_array($array) || empty($search)) {
return $found;
} $rows = count($array);//行数
$cols = count($array[0]);//列数 $row = 0;//行标识
$col = $cols-1; //列标识 末端列 while($row < $rows && $col >= 0 ) { if($array[$row][$col] == $search) {
$found = true;
break;
}
//右上角元素大于要查询的 减少列
if($array[$row][$col] > $search) {
--$col;
}else if($array[$row][$col] < $search){
++$row;
}
} return $found; }
通过这个题目,我们可以想到,当我们在查找一个数的时候,可以逐渐减少查询的区间。来加快查询。
【剑指Offer学习】【面试题:二维数组中的查找】PHP实现的更多相关文章
- 《剑指Offer》面试题-二维数组中的查找
		
题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...
 - 剑指offer学习读书笔记--二维数组中的查找
		
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序.请设计一个函数,输入这样的一个二维数组和一个整数,判断数组是否含有这个整数. 1 2 8 9 2 4 9 1 ...
 - 剑指Offer - 九度1384 - 二维数组中的查找
		
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
 - 剑指offer【01】- 二维数组中的查找(Java)
		
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...
 - 剑指offer第二版-4.二维数组中的查找
		
面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...
 - 剑指offer笔记面试题4----二维数组中的查找
		
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 测试用例: 二维数组中包含 ...
 - 剑指Offer编程题1——二维数组中的查找
		
剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...
 - 【剑指Offer】1、二维数组中的查找
		
题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...
 - 剑指offer(3)——二维数组中的查找
		
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 思路: 首先选取数组中右上 ...
 - 【剑指Offer】01、二维数组中的查找
		
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
 
随机推荐
- Java获取当前的日期和时间
			
Java获取当前的日期和时间 1.具体实现方法如下 /** * @Title:DateTime.java * @Package:com.you.model * @Description:获取当前的日期 ...
 - .net core 环境安装失败,错误:0x80072EE2
			
安装[DotNetCore.1.0.1-VS2015Tools.Preview2.0.3.exe]失败,提示这个界面 查看log发现,发现猫腻,然后copy下链接,用迅雷手动下载[AspNetCore ...
 - CASE WHEN用法
			
问题:假如说这个条件有一条数据不满足,那么那条数据就不会读出来,,那么,我怎么才能把它读出并且赋值为空呢 方法: SELECT `s`.*, ( CASE THEN SUM(a.total_numbe ...
 - Css多列语法笔记
			
columns多列属性定义: column-width:规定列的宽度(此宽度是缩放scale以后的最小宽度): column-count:规定元素被分隔的列数: column-rule设置所有colu ...
 - 【HNOI2004】宠物收养所(splay)
			
题面 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的 ...
 - linux系统文件扩展名介绍
			
1.源码tar.tar.gz .tgz.zip.tar.bz 表示压缩文件,创建命令等 2.sh表示shell脚本文件,通过shell语言开发的程序. 3.pl 表示perl语言文件,通过perl语言 ...
 - 将PPT文件内容转换为图片放在Email邮件正文中发送
			
通过Email推送统计报告.一般除了要求将PPT报告文件作为附件发给用户,同时希望将报告内容在邮件中直观展示. 一份统计报告中经常包含柱状图.饼图.好看的图表,这些信息要直接在Email中展示比较复杂 ...
 - [设计]GUI设计规范的规范
			
1. 前言 很多著名的软件企业都有GUI设计规范,如 Apple 和 Google,得益于这些设计规范(或者叫指南),设计者才可以开发出符合平台视觉及交互要求的UI.其实除了这些大公司,软件公司都最好 ...
 - 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
			
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
 - 关于java构造函数,静态代码块,构造代码块,和普通代码块相关总结(一)
			
构造函数.构造代码块和静态代码块容易混淆,它们的执行条件和执行顺序也常常容易犯迷.这里就针对这些问题说一下我个人的一些理解,顺便对这部分内容做个小结. 一.构造函数 格式:类名(参数1,参数2,-){ ...