[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 :当前的数组 ...
随机推荐
- 小程序快捷键(mac中)
快捷键 格式调整 - Ctrl+S:保存文件 - Ctrl+[, Ctrl+]:代码行缩进 - Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块 - Ctrl+C Ctrl ...
- STM32外设初始化步骤
1.定义外设结构体: 2.开启外设时钟: 3.调用缺省值配置函数: 4.外设具体配置: 5.外设使能.
- 当noncopyable遇见singleton
在实现单例类时,通常要把构造相关的几个函数访问权限设为private或protected(最好是private).但假设一个大型系统中,有数十个单例类(这很正常,单例类其实是外观模式的一种最常用设计) ...
- 背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件
[源码下载] 背水一战 Windows 10 (74) - 控件(控件基类): UIElement - 与 CanDrag 相关的事件, 与 AllowDrop 相关的事件 作者:webabcd 介绍 ...
- XCode 无法识别设备
XCode 取消Unpair Device 后不能读取设备 1:退出XCode 2:断开设备连接 3:在终端执行‘sudo pkill usbmuxd’ 4:重启XCode 5:连接设备即可
- redis key的过期时间
设置redis key的生存过期时间 Redis 有四个不同的命令可以用于设置键的生存时间(键可以存在多久)或过期时间(键什么时候会被删除) : EXPlRE 命令用于将键key 的生存时间设置为tt ...
- 前后端分离开发之前端自己的API(DB)---- (1)
Creating demo APIs for Front-End Developer 心理准备 Tool-1 开发工具/编辑器:Visual Studio Code , 即 VSCode官网: htt ...
- U-boot中SPL功能和源码流程分析
在U-boot目录下,有个比较重要的目录就是SPL的,SPL到底是什么呢?为什么要用它呢? SPL(Secondary programloader)是uboot第一阶段执行的代码.主要负责搬移uboo ...
- liunx下判断有线网口硬件是否正常的三个常用方式
第一种,命令法: /mnt/wifi$ cat /proc/net/dev Inter-| Receive ...
- python实现stack并测试
栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算. 这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新 元素放 ...