PHP实现找出有序数组中绝对值最小的数算法分析
发布时间 - 2026-01-11 02:40:46 点击率:次本文实例讲述了PHP实现找出有序数组中绝对值最小的数算法。分享给大家供大家参考,具体如下:

问题:
一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值。
方法1:
遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数。
方法2:
二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn)。
分析步骤:
1. 如果第一个数为正数,说明整个数组没有负数,直接返回第一个数
2. 如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数
3. 数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场:
①. 如果a[mid]<0,因为数组是升序,说明绝对值最小的数不会出现在a[mid]左边,同时判断a[mid+1]元素的正负,如果为负数,那么需要在mid右侧区间进行查找,如果a[mid-1]不为负,那么说明这两个数是数组中正负交界点,返回这两个数的绝对值较小的。
②. 如果a[mid]>0,因为数组是升序,说明绝对值最小的数不会出现在a[mid]右边,同时判断a[mid-1]元素的正负,如果为负数,那么说明这两个数是数组中正负交界点,返回这两个数的绝对值较小的,如果a[mid-1]不为负,那么需要在mid以左的区间进行查找。
③. 如果a[mid] == 0,那么a[mid]即为绝对在最小的元素。
function selectAbsMinNum(array $arr)
{
$start = 0;
$len = count($arr) - 1;
if ($arr[0] > 0) { //正数数组
return $arr[0];
}
if ($arr[$len] < 0) { //负数数组
return $arr[$len];
}
while ($start < $len) {
$mid = floor(($start + $len) / 2);
if ($arr[$mid] > 0) {
if ($arr[$mid - 1] > 0) {
$len = $mid - 1;
} else {
return min($arr[$mid], -$arr[$mid - 1]);
}
} elseif ($arr[$mid] < 0) {
if ($arr[$mid + 1] < 0) {
$start = $mid + 1;
} else {
return min(-$arr[$mid], $arr[$mid + 1]);
}
} else {
return $arr[$mid];
}
}
}
$sortArr = [-5, -4, -4, -4, 5, 7, 9];
echo selectAbsMinNum($sortArr), PHP_EOL;
运行结果:4
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》及《PHP数组(Array)操作技巧大全》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 找出
# 有序数组
# 绝对值
# 最小的数
# 算法
# PHP实现统计一个数字在排序数组中出现次数的方法
# PHP实现合并两个有序数组的方法分析
# php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
# php实现按照权重随机排序数据的方法
# php实现有序数组旋转后寻找最小值方法
# 这两个
# 升序
# 程序设计
# 出现在
# 组中
# 不为
# 较小
# 数为
# 也有
# 相关内容
# 第一个
# 有可能
# 遍历
# 感兴趣
# 数据结构
# 给大家
# 更多关于
# 可以利用
# 即为
# 所述
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何基于PHP生成高效IDC网络公司建站源码?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
详解jQuery中的事件
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel如何实现事件和监听器?(Event & Listener实战)
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
浅述节点的创建及常见功能的实现
如何快速搭建安全的FTP站点?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何快速启动建站代理加盟业务?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何快速上传自定义模板至建站之星?
如何在腾讯云服务器快速搭建个人网站?
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Android自定义控件实现温度旋转按钮效果
如何在新浪SAE免费搭建个人博客?
如何构建满足综合性能需求的优质建站方案?
如何在IIS中新建站点并配置端口与物理路径?
java ZXing生成二维码及条码实例分享
网站制作价目表怎么做,珍爱网婚介费用多少?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
简历在线制作网站免费版,如何创建个人简历?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
如何用AI帮你把自己的生活经历写成一个有趣的故事?
太平洋网站制作公司,网络用语太平洋是什么意思?
进行网站优化必须要坚持的四大原则
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何实现本地化和多语言支持?(i18n教程)
如何在宝塔面板中修改默认建站目录?

