# preconditions: my $elem = 1; my $k = 3; my $n_arrays = [map [split], ]; # algorithm: my @pairs = (0) x (@$n_arrays + 1); for (@$n_arrays) { next unless grep $_==$elem, @$_[0..$elem]; $_ != $elem and $pairs[$_]++ for @$_; } my @top_k = (sort{$pairs[$a]<=>$pairs[$b]} 1..$#pairs)[reverse -$k..-1]; print "@top_k\n"; __END__ 2 4 5 7 8 10 1 2 5 6 7 9 2 6 7 8 9 10 1 3 5 10 1 3 4 5 6 8 9 1 2 4 6 1 2 4 5 7 10 1 3 4 6 7 8 9