在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
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实现的更多相关文章

  1. [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 ...

  2. 两个有序数组中查找第K大数

    题目:两个数组A.B,长度分别为m.n,即A(m).B(n),分别是递增数组.求第K大的数字.   方法一: 简单的办法,使用Merge Sort,首先将两个数组合并,然后在枚举查找.这个算法的时间复 ...

  3. LeetCode 34 Search for a Range (有序数组中查找给定数字的起止下标)

    题目链接: https://leetcode.com/problems/search-for-a-range/?tab=Description   Problem: 在已知递减排序的数组中,查找到给定 ...

  4. 从有序数组中查找某个值 low_bound

    二分搜索 题意: 给定长度为n的单调不下降数列a0, ...an-1和一个数k,求满足ai>=k条件的最小的i. 不存在的情况下输出n. 输入: 5        3 2 3 3 5 6 输出: ...

  5. 找轮转后的有序数组中第K小的数

    我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数. 此处假设数组中没有相同的数,原排列顺序是递增排列. 在轮转后的有序数组中查找最小数的算法 ...

  6. Leetcode算法【34在排序数组中查找元素】

    在之前ARTS打卡中,我每次都把算法.英文文档.技巧都写在一个文章里,这样对我的帮助是挺大的,但是可能给读者来说,一下子有这么多的输入,还是需要长时间的消化. 那我现在改变下方式,将每一个模块细分化, ...

  7. 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(34)在排序数组中查找元素的第一个和最后一个位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: / ...

  8. LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)

    题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/#/description   姊妹篇:http://www. ...

  9. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)

    题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description   Problem :当前的数组 ...

随机推荐

  1. python黑帽子-黑客与渗透测试编程之道(源代码)

    链接: https://pan.baidu.com/s/1i5BnB5V   密码: ak9t

  2. 2018年2月19日我的java学习

    2019/2/18 星期一今天学习了Java 中的面向对象思想主要学习了类 构造器等在学习修饰属性的过程中,有4点必须牢记前提是理解类的各种关系 类中有5种关系 本身 同包类 同包继承子类 不同包继承 ...

  3. Python简介及环境安装

    Python 官网传送门 Python是一种面向对象的解释性计算机程序设计语言. Python 2.7将于2020年1月1日终止支持,本笔记基于Python3. pip pip 是一个现代的,通用的 ...

  4. IntelliJ IDEA的破解方法

    一.下载并安装, IntelliJ IDEA的官网:https://www.jetbrains.com 下载 下载 下载 二.破解. 百度下载一个 JetbrainsCrack-2.7-release ...

  5. ESP32 windows开发环境的搭建(官方方法)

    首先保证电脑中的已经下载了git客户端,没有的自行去https://git-scm.com/下载 STEP1: 获得编译工具链 Windows没有内置的“make”环境,所以安装工具链你将需要一个兼容 ...

  6. 带权单源最短路[稀疏图](Dijkstra)

    因为是稀疏图,所以应当选择邻接表来存储 构造一个邻接表 这只是我的构造方法,有很多种更好的构造方法,大家可以自己去构造 typedef int vertex; typedef int WeightTy ...

  7. Java设计模式----中介者模式

    说到中介大家都不会陌生,买房子租房子有中介,出国留学有中介,买卖二手车还是有中介.那么中介到底是个什么角色呢?实际上,中介就是让买卖双方不必面对面直接交流,由他/她来完成买卖双方的交易,达到解耦买卖人 ...

  8. Scala微服务架构 一

    因为公司的一个项目需求变动会非常频繁,同时改动在可控范围内,加上产品同学喜欢一些超前思维,我们的CTO决定提前开启八门,使用微服务架构. 划重点 微服务架构主要特点: ==独立组件(自主开发升级)== ...

  9. Javascript高级编程学习笔记(12)—— 引用类型(1)Object类型

    前面的文章中我们知道JS中的值分为两种类型 基础类型的值和引用类型的值 基础类型的值我已经大概介绍了一下,今天开始后面几天我会为大家介绍一下引用类型的值 Object类型 对象是引用类型的值的实例,在 ...

  10. JavaScript使用注意事项

    1.jQuery和JS中页面加载完后执行方法的写法 (1)在javascript中用来执行页面加载中的操作时候,我们会使用 window.onload=function(){} window.onlo ...