2

我需要找出数组中出现最大次数的最小值。我已将这些值存储在其他数组中。

my @arr=(1,2,3,4,1,3,4,1);

1 是出现最多次数的最小值。

4

3 回答 3

3

您可以使用哈希来计算每个数字的出现次数。最频繁的数可以被找到,因为其频率等于max频率的 ,它们中的最小值可以通过min、两者minmax来自找到List::Util

#!/usr/bin/perl

use warnings;
use strict;

use List::Util qw(min max);

my @arr = (1, 2, 3, 4, 1, 3, 4, 1);
my %occurrences;
$occurrences{$_}++ for @arr;
my $max_freq = max(values %occurrences);
print min(grep $max_freq == $occurrences{$_}, keys %occurrences);
于 2013-09-17T07:34:51.103 回答
2

如果有两个或更多元素出现相同的次数,则首选较小的元素:

my @arr=(1,2,3,4,1,3,4,1);

my %seen;
$seen{$_}++ for @arr;

my ($min_val) = sort { $seen{$b} <=> $seen{$a} || $a <=> $b } keys %seen;
print "$min_val\n";
于 2013-09-17T07:29:10.123 回答
0

使用它,它将非常适合您

my @arr=(1, 2, 3, 4, 1, 3, 4, 1);
my %count;
foreach (@arr){
    $count{$_}++;
}
my ($min_by_value) = sort { $a <=> $b} keys %count;
my ($max_by_count) = sort { $count{$b} <=> $count{$a} } keys %count;
my $max =
    ($count{$min_by_value} >= $count{$max_by_count}) ? $min_by_value : $max_by_count;
print "minimum value max times = $max\n";
于 2013-09-17T07:20:39.563 回答