我试图找出为什么这会继续印刷"多数元素"每个周期的候选人。
我一直在努力工作的代码是一个多数元素搜索(找到一个重复超过列表长度一半的元素)。
我无法分离查找候选项和针对数组进行测试的过程,因为我的输入是一个具有不确定数量的数组的文本文件。这是来自rosalind.info的练习,每次尝试解决时都会有不同的输入。
输入的一个例子是
-5 5 5 5 5 5 5 5 -8 7 7 7 1 7 3 7 -7 1 6 5 10 100 1000 1 -5 1 6 7 1 1 10 1
这是我到目前为止所写的内容。
foreach my $currentrow (@lists) {
my @row = ();
@row = split( /\s/, $currentrow );
my $length = $#row;
my $count = 0;
my $i = 0;
for $i ( 0 .. $length - 1 ) {
if ( $count == 0 ) {
$candidate = $row[$i];
$count++;
}
if ( ( $count > 0 ) and ( $i = $length - 1 ) ) {
my $counter2 = 0;
for my $j ( 0 .. $length - 1 ) {
if ( $row[$j] == $candidate ) {
$counter2++;
}
}
if ( $counter2 <= ( $#row / 2 ) and ( $i = $length - 1 ) ) {
$candidate = -1;
print $candidate, " ", $i, " ";
}
if ( $counter2 > ( $#row / 2 ) and ( $i = $length - 1 ) ) {
print $candidate, " ", $i, " ";
}
}
if ( $candidate == $row[$i] and $count > 0 ) {
$count = $count + 1;
}
if ( $candidate != $row[$i] and $count > 0 ) {
$count = $count - 1;
}
}
}
答案 0 :(得分:1)
您有use strict
和use warnings 'all'
吗?
我认为您的问题可能是因为测试$i = $length - 1
,这是一项任务,应该是$i == $length - 1
答案 1 :(得分:1)
要查找多数元素,我会使用哈希:
perl -nae '%h=(); $h{$_}+=2 for @F; $h{$_}>@F and print for keys %h; print "\n"'
每行输入都单独处理。每行输出都匹配一行输入并显示其多数元素,如果没有这样的元素则为空。
编辑:现在解决方案使用autosplit(-a
),它更短,不仅适用于数字。