寻找两个正序数组的中位数【php版】
2021/8/2 17:06:16
本文主要是介绍寻找两个正序数组的中位数【php版】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<?php class Solution { /** * @param Integer[] $nums1 * @param Integer[] $nums2 * @return Float */ function findMedianSortedArrays($nums1, $nums2) { $l1 = count($nums1); $l2 = count($nums2); $l = $l1 + $l2; if ($l % 2 == 1) { $ans = $this->getKthElm($nums1, $nums2, intdiv($l+1, 2)); } else { $ansL = $this->getKthElm($nums1, $nums2, intdiv($l, 2)); $ansR = $this->getKthElm($nums1, $nums2, intdiv($l, 2) + 1); $ans = ($ansL + $ansR) / 2.0; } return $ans; } /** * 获取两个数组中,排第k位的元素,使用二分法 * @param $nums1 * @param $nums2 * @param $k */ function getKthElm($nums1, $nums2, $k) { $idx1 = 0; $idx2 = 0; $l1 = count($nums1); $l2 = count($nums2); while (true) { // 边界情况 if ($idx1 == $l1) { return $nums2[$idx2 + $k -1]; } if ($idx2 == $l2) { return $nums1[$idx1 + $k - 1]; } if ($k == 1) { return min($nums1[$idx1], $nums2[$idx2]); } // 正常情况 $half = intdiv($k, 2); $newIdx1 = min($idx1+$half, $l1) - 1; $newIdx2 = min($idx2+$half, $l2) - 1; if($nums1[$newIdx1] <= $nums2[$newIdx2]) { $k = $k - ($newIdx1 - $idx1 + 1); $idx1 = $newIdx1 + 1; } else { $k = $k - ($newIdx2 - $idx2 + 1); $idx2 = $newIdx2 + 1; } } } }
这篇关于寻找两个正序数组的中位数【php版】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享
- 2024-11-01开源 PHP 商城项目 CRMEB 安装和使用教程
- 2024-11-01用php和mysql写无限分类,有哪几种方法-icode9专业技术文章分享
- 2024-10-31php数据分表导出时部分数据无法导出什么原因-icode9专业技术文章分享
- 2024-10-30有经验的 PHP 开发者学习一门新的编程语言,有哪些推荐的有前景的语言-icode9专业技术文章分享
- 2024-10-21php 检测图片是否篡改过-icode9专业技术文章分享