[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 :当前的数组 ...
随机推荐
- noip第16课资料
- yii2.0 点击验证码图片不刷新
修改vender\yiisoft\yii2\captcha\CaptchaAction下的run方法 public function run(){ if (Yii::$app->request- ...
- Winform嵌入CEF(非正常用法)
(一)复制下面必备文件|-- locales|--en-US.pak|--cef.pak|--cef_100_percent.pak |--cef_200_percent.pak|--cef_exte ...
- 网络编程—端口分类调研和netstat命令
运输层的端口: 1.什么是端口?为甚要使用用端口? 进程的创建和撤销都是动态的,通信的一方几乎无法识别对方机器上的进程,我们需要利用目的主机提供的功能来识别终点. 所以为了解决上述问题,我们就在运输层 ...
- 兼容多数浏览器的js添加收藏夹脚本
浏览器不断发展,js的很多脚本需要跟进才能适应,目前多数代码对新版本浏览器(IE11, Firefox 27)无法适用,特关注跟进. 推荐代码1 适用浏览器:IE11(windows 8.1), Fi ...
- Swift5 语言指南(十三) 方法
方法是与特定类型相关联的函数.类,结构和枚举都可以定义实例方法,这些方法封装了用于处理给定类型的实例的特定任务和功能.类,结构和枚举也可以定义类型方法,它们与类型本身相关联.类型方法类似于Object ...
- Java的组合排列问题
从4个人中选2个人参加活动,一共有6种选法. 从n个人中选m个人参加活动,一共有多少种选法?C(m/n)=C((m-1)/(n-1))+C(m/(n-1))数学算法 public class Main ...
- 2D转换与3D转换的区别
2D与3D的区别——2D 转换元素能够改变元素 x 和 y 轴.3D 转换元素还能改变其 Z 轴.
- vue 自学笔记(七) 组件细节问题
前情提要: 这里盘点一下,组件细节的问题 现在我们观察一些用框架开发的网页BiliBili.掘金,会发现很多部分都十分相似或者一模一样,我们甚至可以将其拆分归类.而事实上,页面的确是被一个个组件构成的 ...
- 【Redis面试题】Redis的字符串是怎么实现的?
年前本人在找工作面试时在Redis相关问题上可栽了跟头.在面试前按常规套路准备了一下,比如 Redis 的常用5种数据结构,Redis持久化策略,Redis实现分布式锁,简单发布订阅等等都准备了,当时 ...