此代码中的错误是什么? 可以在perl代码中为1-d数组中的峰值发现提供代码吗? 我试过,但如果有人帮助我,我可以完成。
@a=(5.7,5.3,8.2,16.5,34.2,58.8,5.9,8,5,27.8);
@a=\$ptr;
$i;
$f=1;
$l=10;
$num=@a;
print"\nthe num of elements in array:$num";
$s=0;
$s=$s+$_ for @a;
print"\nthe sum of all elements in array:$s";
$mean=$s/$num;
print"\n the mean is :$mean";
$mid=($f+$l)/2;
print"\nthe mid point:$mid";
print"\nthe middle element :$a[5]";
unless($a[$i]==$a[5])
{if($a[$i]>$a[5])
for ($i=$a[5];$a[$i]<$a[5];$i--);
{
$ptr=$a[$i-1];
$ptr->$max;
print"$max";
}
}`
答案 0 :(得分:5)
找到最大值的最简单方法是使用核心List::Util模块。
use List::Util qw(max);
my $max = max @arr;
答案 1 :(得分:2)
快速执行此操作的方法是使用sort
。但请务必使用数字比较器,因为默认情况下排序会对字母数字进行排序:
my @b = sort {$b <=> $a} @a;
print "$b[0]";
<强>更新强>
或者您可以使用map
中的List::Util
- 谢谢@squiguy。
use List::Util qw(max);
my $peak = max(@a);
sort
确实应该比max
慢,因为max
算法是O(n)并且排序是O(n * log(n))。如果@a足够小则无关紧要。
但是,max
有另一个好处,因为它更能说明你想要做什么,因此更具可读性。 map
来自List::Util
,在版本5.8.0
答案 2 :(得分:0)
Perl有一个内置的sort
函数,可以在这种情况下提供帮助。
a@ = sort {$b <=> $a} @a;
print "$a[0]";