[PHP] 算法-二位有序数组中查找的PHP实现
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1.二维数组,行row从左到右递增,列col从上到下递增
2.定左下角为比较点,比它大的位于它右边,因此col++,并且col<=arr[0].length-1
3.比左下角小的位于它的上面,因此row--,row>=0 col=0
row=arr.length-1
while row>=0&&col<=arr[0].length-1
if key==arr[row][col]
return true
elseif key>arr[row][col]
col++
else
row-
return false
<?php
//构造一个从上到下,从左到右递增的数组
$arr=array();
$flag=0;
for($i=0;$i<10;$i++){
$flag=$i*10;
for($j=0;$j<10;$j++){
$flag++;
$arr[$i][]=$flag;
}
}
//生成了一个1到100的二维数组 function Find($target, $array){
$col=0;
$row=count($array)-1;
while($row>=0 && $col<=count($array[0])-1){
if($target==$array[$row][$col]){
return array($row,$col);
}elseif($target>$array[$row][$col]){
$col++;
}else{
$row--;
}
}
return false;
}
//输出行,列
var_dump(Find(50,$arr));
var_dump($arr);
array(2) {
[0]=>
int(4)
[1]=>
int(9)
}
array(10) {
[0]=>
array(10) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
[5]=>
int(6)
[6]=>
int(7)
[7]=>
int(8)
[8]=>
int(9)
[9]=>
int(10)
}
[1]=>
array(10) {
[0]=>
int(11)
[1]=>
int(12)
[2]=>
int(13)
[3]=>
int(14)
[4]=>
int(15)
[5]=>
int(16)
[6]=>
int(17)
[7]=>
int(18)
[8]=>
int(19)
[9]=>
int(20)
}
[2]=>
array(10) {
[0]=>
int(21)
[1]=>
int(22)
[2]=>
int(23)
[3]=>
int(24)
[4]=>
int(25)
[5]=>
int(26)
[6]=>
int(27)
[7]=>
int(28)
[8]=>
int(29)
[9]=>
int(30)
}
[3]=>
array(10) {
[0]=>
int(31)
[1]=>
int(32)
[2]=>
int(33)
[3]=>
int(34)
[4]=>
int(35)
[5]=>
int(36)
[6]=>
int(37)
[7]=>
int(38)
[8]=>
int(39)
[9]=>
int(40)
}
[4]=>
array(10) {
[0]=>
int(41)
[1]=>
int(42)
[2]=>
int(43)
[3]=>
int(44)
[4]=>
int(45)
[5]=>
int(46)
[6]=>
int(47)
[7]=>
int(48)
[8]=>
int(49)
[9]=>
int(50)
}
[5]=>
array(10) {
[0]=>
int(51)
[1]=>
int(52)
[2]=>
int(53)
[3]=>
int(54)
[4]=>
int(55)
[5]=>
int(56)
[6]=>
int(57)
[7]=>
int(58)
[8]=>
int(59)
[9]=>
int(60)
}
[6]=>
array(10) {
[0]=>
int(61)
[1]=>
int(62)
[2]=>
int(63)
[3]=>
int(64)
[4]=>
int(65)
[5]=>
int(66)
[6]=>
int(67)
[7]=>
int(68)
[8]=>
int(69)
[9]=>
int(70)
}
[7]=>
array(10) {
[0]=>
int(71)
[1]=>
int(72)
[2]=>
int(73)
[3]=>
int(74)
[4]=>
int(75)
[5]=>
int(76)
[6]=>
int(77)
[7]=>
int(78)
[8]=>
int(79)
[9]=>
int(80)
}
[8]=>
array(10) {
[0]=>
int(81)
[1]=>
int(82)
[2]=>
int(83)
[3]=>
int(84)
[4]=>
int(85)
[5]=>
int(86)
[6]=>
int(87)
[7]=>
int(88)
[8]=>
int(89)
[9]=>
int(90)
}
[9]=>
array(10) {
[0]=>
int(91)
[1]=>
int(92)
[2]=>
int(93)
[3]=>
int(94)
[4]=>
int(95)
[5]=>
int(96)
[6]=>
int(97)
[7]=>
int(98)
[8]=>
int(99)
[9]=>
int(100)
}
}
[PHP] 算法-二位有序数组中查找的PHP实现的更多相关文章
- [LeetCode] 34. Find First and Last Position of Element in Sorted Array 在有序数组中查找元素的第一个和最后一个位置
Given an array of integers nums sorted in ascending order, find the starting and ending position of ...
- 两个有序数组中查找第K大数
题目:两个数组A.B,长度分别为m.n,即A(m).B(n),分别是递增数组.求第K大的数字. 方法一: 简单的办法,使用Merge Sort,首先将两个数组合并,然后在枚举查找.这个算法的时间复 ...
- LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)
题目链接: https://leetcode.com/problems/search-for-a-range/?tab=Description Problem: 在已知递减排序的数组中,查找到给定 ...
- 从有序数组中查找某个值 low_bound
二分搜索 题意: 给定长度为n的单调不下降数列a0, ...an-1和一个数k,求满足ai>=k条件的最小的i. 不存在的情况下输出n. 输入: 5 3 2 3 3 5 6 输出: ...
- 找轮转后的有序数组中第K小的数
我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数. 此处假设数组中没有相同的数,原排列顺序是递增排列. 在轮转后的有序数组中查找最小数的算法 ...
- Leetcode算法【34在排序数组中查找元素】
在之前ARTS打卡中,我每次都把算法.英文文档.技巧都写在一个文章里,这样对我的帮助是挺大的,但是可能给读者来说,一下子有这么多的输入,还是需要长时间的消化. 那我现在改变下方式,将每一个模块细分化, ...
- 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(34)在排序数组中查找元素的第一个和最后一个位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: / ...
- LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/#/description 姊妹篇:http://www. ...
- LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description Problem :当前的数组 ...
随机推荐
- 自动化部署shell
yum install curl policycoreutils openssh-server openssh-clients postfix [root@linux-node2 ~]# yum in ...
- 解决eclipse运行内存溢出方案
1.在工具栏找到Window -> Preference 2.双击选择的jdk 3.在VM输入以下设置运行的内存的大小即可(具体内存大小可以根据项目进行设置) -Xms800m -Xmx800m ...
- python pickle模块的使用/将python数据对象序列化保存到文件中
# Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...
- this练习题
1 function fn2(){ console.log(this.n) var n='n' this.n=10 console.log(n) } var obj={fn2:fn2, n:1} fn ...
- 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。
一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...
- Source Insight函数调用关系显示设置
当我们需要设置source Insight的项目代码中函数调用关系时,可通过如下的设置来实现: 1.显示函数调用关系窗口 Source Insight工具栏中“View”—>“Relation ...
- Maven - 实例-2-使用本地仓库中的依赖包
Maven引入构建包的流程 执行mvn compile命令编译源代码,如果编译过程中需要用到其他的包, maven将会在pom.xml文件中查找是否引入该依赖包的坐标. 示例: <depende ...
- servlet(二)
http协议 (1)什么是http协议? 是一种网络应用层协议,规定了浏览器如何与web服务器之间进行通信以及相应的 数据包的结构. 浏览器与web服务器之间如何通信? step1.建立连接 step ...
- linux中一些简便的命令之cut
提中的这些命令都是些小命令,很简便,在工作过程中经常使用,具体使用方法如下: cut 使用说明:一般是把某个整齐的文档输出其中某列使用 常用的参数有: -f 选择打印的列 -d 指定定界符(默认定界符 ...
- Jpush极光推送的一些心得
在集成极光推送的时候,test完全正常.部署到服务器后只发送一条推送之后推送不继续发送.经排查: 2018-06-28 10:24:26.394 [ThreadPoolTaskExecutor-4] ...