微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 查找系列中的峰值?

我有一个这样的系列:

14,13,12,14,15,18,20,17,15,19,22,24,22,18,15,14,17 ……

如果我使用这些值作为Y坐标在X-Y轴上的图表上绘制这些点,那么您将看到在20和20处存在峰值. 24.

我想在系列中找到所有这些峰值

我试过了:

$a=array(14, 13, 12, 14, 15, 18, 20, 17, 15, 19, 22, 24, 22, 18, 15, 14, 17  );
rsort($a);

echo $a[0];
echo $a[1];

但这并没有给出我在图表上看到的两个峰值.上面代码的结果是24和22.但是图表上的峰值是20和24 …

有没有办法检测阵列以确定整个系列中的峰值?
我不需要工作代码.只是我可以处理的一些想法.

解决方法:

正如Mark Baker建议的那样,您需要检查数组中的每个值是否大于上一个值和下一个值.这就是定义峰值的原因.

只需确保从第二个索引开始并在第n-1项上完成,否则你将得到一个未定义的偏移错误.

$a = array(14, 13, 12, 14, 15, 18, 20, 17, 15, 19, 22, 24, 22, 18, 15, 14, 17);
$arr = [];

for($i=1; $i<count($a)-1; $i++){
    if($a[$i] > $a[$i+1] && $a[$i] > $a[$i-1]) {
        array_push($arr, $a[$i]);
    }
}

var_dump($arr); //returns: array(2) { [0]=> int(20) [1]=> int(24) }

根据您的应用程序,您可能希望添加一些逻辑,以防两个或更多项“一起”为峰值.例如,22,24,24,22,18.如果这是您想要的,只需更改逻辑以在下一项上检查> =:

if($a[$i] > $a[$i+1] && $a[$i] >= $a[$i-1]) {

这将产生与上述相同的结果.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐