php数据流中第K大元素的计算方法及代码分析
时间:2021-12-28
来源:互联网
标签:
在手机上看
手机扫描阅读
设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
计算方法
1、直接使用最小堆,堆的大小为 k,这样保证空间占用最小,最小堆的根节点是就是最小值,也是我们想要的结果。
2、php的spl标准库是有最小堆这个库,直接在代码中继承SplMinHeap。
实例
class KthLargest extends SplMinHeap {
/**
* @param Integer $k
* @param Integer[] $nums
*/
static $nums;
public $k;
function __construct($k, $nums) {
$this->k = $k;
// 遍历初始化数组,分别插入堆中
foreach ($nums as $v) {
$this->add($v);
}
}
* @param Integer $val
* @return Integer
function add($val) {
// 维持堆的大小为k,当堆还未满时,插入数据。
if ($this->count() < $this->k) {
$this->insert($val);
} elseif ($this->top() < $val) {
// 当堆满的时候,比较要插入元素和堆顶元素大小。大于堆顶的插入。堆顶移除。
$this->extract();
return $this->top();
}}
* Your KthLargest object will be instantiated and called as such:
* $obj = KthLargest($k, $nums);
* $ret_1 = $obj->add($val);实例扩展:
class KthLargest {
/**
* @param Integer $k
* @param Integer[] $nums
*/
static $nums;
public $k;
function __construct($k, $nums) {
$this->k = $k;
$this->nums = $nums;
}
/**
* @param Integer $val
* @return Integer
*/
function add($val) {
array_push($this->nums, $val);
rsort($this->nums);
return $this->nums[$this->k - 1];
}
}第一个思路,时间超限的原因是每次都要对$this->nums这个数组,进行重新排序,上次已经排序好的,还要再重新排一次,浪费时间。所以,下面的解法是,每次只保存,上次排序完的前k个元素。这次的进行排序的次数就减少了。时间也减少了。
class KthLargest {
/**
* @param Integer $k
* @param Integer[] $nums
*/
static $nums;
public $k;
function __construct($k, $nums) {
$this->k = $k;
$this->nums = $nums;
}
/**
* @param Integer $val
* @return Integer
*/
function add($val) {
array_push($this->nums, $val);
rsort($this->nums);
$this->nums = array_slice($this->nums, 0, $this->k);
return $this->nums[$this->k - 1];
}
}到此这篇关于php数据流中第K大元素的计算方法及代码分析的文章就介绍到这了,更多相关php数据流中第K大元素的计算方法内容请搜索PHP爱好者以前的文章或继续浏览下面的相关文章希望大家以后多多支持PHP爱好者!
相关阅读 更多
-
Ext.MessageBox消息框使用详解 时间:2025-11-20 -
GAppProxy超详细安装配置教程 时间:2025-11-20 -
C#中e.Cancel用法详解 e.Cancel和e.Handled区别 时间:2025-11-20 -
TestDirector超详细下载、安装、配置教程 时间:2025-11-20 -
AssemblyInfo.cs文件详解(常见属性及作用等) 时间:2025-11-20 -
什么是无理数 常见的无理数有哪些 无理数和有理数的区别 时间:2025-11-19
今日更新
-
欧易中秋礼盒延迟发放原因及最新进展说明
阅读:18
-
126邮箱登录入口-免费登录126邮箱网页版
阅读:18
-
闪现是什么梗?揭秘游戏中瞬间移动的爆笑名场面,玩家必看!
阅读:18
-
索拉纳价格诞生至今走势图 SOL历史价格波动K线图最新版
阅读:18
-
126邮箱登录入口-免费登录126邮箱网页版
阅读:18
-
欧易活动风控高的原因及优化策略解析
阅读:18
-
鸣潮全息战略・幻痛挑战更新-伪作的神王挑战开启
阅读:18
-
三角洲行动D1-3钥匙怎么获得-零号大坝钥匙获取方法
阅读:18
-
龙族卡塞尔之门帕西皮肤晨光之誓-11月20日将上线
阅读:18
-
2025潜力币:掘金未来十大虚拟货币
阅读:18










