编程7:生成窗口最大值数组
Posted xlzfdddd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程7:生成窗口最大值数组相关的知识,希望对你有一定的参考价值。
<?php header("content-type:text/html;charset=utf-8"); /* *生成窗口的最大值数组 P19 * 注意SplDoublyLinkedList的使用!!! * top指的是生成链表的尾部!!! * bottom指的是生成链表的头部!!! */ function getMaxwindow($arr,$w){ if(count($arr)<$w){ return 0; } $qMax = new SplDoublyLinkedList(); $res = array(); $index = 0; for($i=0;$i<count($arr);$i++){ while (! $qMax->isEmpty() && $arr[$i] >= $arr[$qMax->top()]){ //遍历到数组i位置时,从队尾开始依次进行比较,若比队列元素大,就让队列元素从队尾弹出 $qMax->pop(); } $qMax->push($i); //否则就将这个比较大的元素的下标加进队尾 //处理队头元素过期,就将对头弹出 if($qMax->bottom() == $i-$w){ //这里注意一下 $qMax->shift(); //移除队列头部元素 } //处理返回的数组,当数组遍历到和串口一般大小就开始记录,之后就一直记录 if($i>= $w-1){ $res[$index++] = $arr[$qMax->bottom()] ; } } return $res; } $arr = array(4,3,5,4,3,3,6,7); $window = 3; $res = getMaxwindow($arr,$window); print_r($res); echo "</br>"; //结果:Array ( [0] => 5 [1] => 5 [2] => 5 [3] => 4 [4] => 6 [5] => 7 ) $a = new SplDoublyLinkedList(); $a->push(1); $a->push(2); $a->push(3); $a->push(4); print_r($a); //结果:SplDoublyLinkedList Object ( [flags:SplDoublyLinkedList:private] => 0 [dllist:SplDoublyLinkedList:private] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) ) echo $a->top(); //结果:4 echo $a->bottom(); //结果: 1
以上是关于编程7:生成窗口最大值数组的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段