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教程)  如何在宝塔面板中修改默认建站目录?