[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 :当前的数组 ...
随机推荐
- JavaScript基础视频教程总结(031-040章)
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Ubuntu 14.04 LTS 下使用源码编译安装 Sagemath 6.7 x64 (小结)
原先博客放弃使用,几篇文章搬运过来 下载源码包 系统的最低要求: 6GB 硬盘 : 2GB RAM. 命令行工具: A C/C++ compiler: Since Sage builds its ow ...
- java jar 包加载文件问题
场景: A 项目是一个服务,然后部署到本地 maven 仓库里,然后 B 项目依赖 A 项目,调用 A 项目的方法,但是发现,报错,说找不到文件(config.xsv).这就很奇怪了,怎么会呢, ...
- Linux 线程编程1.0
在编译多线程程序的时候,需要连接libpthread文件: gcc pthread.c -o pthread -lpthread: 所有线程一律平等,没有父子关系,线程属于进程. 创建线程用 p ...
- 6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】
这篇文章,我将带领大家学习HTML Helper.[PS:上一篇-->5.ASP.NET MVC 中的Area[区域]是什么] HTML Helpers是用来创建HTML标签进而创建HTML控件 ...
- 设置Acad2008默认启动 win10设置默认cad2008启动 调试设置.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\AutoCAD.Drawing.17\shell\open\command]@=&quo ...
- 仿B站项目(3)页面配置
页面配置 B站有很多页面,比如说首页啊,动画页啊,音乐页啊,舞蹈页啊,那就从首页开始. 通过观察首页,可以看见有很多模块除了内容之外,在布局颜色等方面都是一样的,所以我可以开发一些模板或者插件,到时候 ...
- Shell-6--预定义变量
- Java基本数据类型总结、类型转换、常量的声明规范,final关键字的用法
1 Java 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过 ...
- 花了一晚上时间,终于把Python的基本用法归纳好了!
一.内置函数 1. complex([real[,imag]]) 返回一个复数,实部 + 虚部*1j,或者把字符串或者数字转成复数形式. 参数可以是复数表达式,也可以是字符串.当参数是字符串的时候,数 ...