PHP二分查找
时间:2022-07-22
本文章向大家介绍PHP二分查找,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这是属于查找类型的题目,因为数组是一个升序排列的整数叔组所以很容易想到使用二分查找这种思想来实现 O(log n) 级别的效率获取答案结果。代码如下
1 class Solution {
2
3 /**
4 * @param Integer[] $nums
5 * @param Integer $target
6 * @return Integer[]
7 */
8 function searchRange($nums, $target) {
9 $len = count($nums);
10 $r = $len;
11 $l = 0;
12 $middle = 0;
13 $found = false;
14 while ($l <= $r && !$found) {
15 $middle = floor($l+($r-$l)/2); //这里是我想写这一篇博客的原因
16 switch (true) {
17 case $nums[$middle] > $target:
18 $r = $middle - 1; break;
19 case $nums[$middle] < $target:
20 $l = $middle + 1; break;
21 default : $found = true; break;
22 }
23 }
24 if ($nums[$middle] !== $target) {
25 return [-1, -1];
26 } else {
27 for ($l=$middle; $l>0&&$nums[$l-1]==$target;){
28 $l--;
29 }
30 for ($r=$middle; $r<$len-1&&$nums[$r+1]==$target;){
31 $r++;
32 }
33 return [$l, $r];
34 }
35 }
36 }
但是在完成这个题目的时候我更了解了 PHP 的一个语言特性:
“变量的类型通常不是由程序员设定的,确切地说,是由 PHP 根据该变量使用的上下文在运行时决定的。” PHP官方文档
所以对数据进行二分时,变量类型可能从整数类型转化为浮点数类型。这个也算是 PHP 咒语的一个特点,所以这里记录下。
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- FreeRTOS例程4-串口DMA收发不定长数据
- FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- 前端如何将json数据导出为excel文件
- 使用Postman访问腾讯云API3.0
- C语言将float拆分为4个hex传输与重组
- C语言字符串相关函数使用示例 strtok_r strstr strtok atoi
- FreeRTOS例程1-基础任务创建
- ARouter路由记录
- java的DES和3DES加解密算法
- Flink 批处理算子详解
- Flink 流计算算子函数详解
- TensorFlow-手写数字识别(三)
- 常用字节转换(字符串转16进制,16进制转字符串)
- TensorFlow-手写数字识别(二)
- TensorFlow-手写数字识别(一)