我想找到的大多数阵列(数字出现的大部分时间)。 我有一个排序后的数组,并使用这些循环:错误在哪里?发现大多数
for(int k = 1;k < length;k++)
{
if(arr[k-1] == arr[k])
{
count++;
if(count > max)
{
max = count;
maxnum = arr[k-1];
}
} else {
count = 0;
}
}
或
for(int h=0;h<length;h++)
{
for(int l=1;l<length;l++)
{
if(arr[h] == arr[l])
{
count++;
if(count > max)
{
max = count;
maxnum = arr[h];
}
} else count = 0;
}
}
它们similiar。当我在小阵列上尝试它们时,一切似乎都没有问题。但在长的运行数组N个元素0 < = N < = 500000,每个元件K 0 < = K < = 10^9他们给错误的答案。 这里是错误http://ideone.com/y2gvnX解决方案。我知道有更好的算法可以找到大多数,但我只需要知道我的错误在哪里。
我真的无法找到它:(可能喜欢帮助!
在第二个中,第二个'for'循环的计数器可能应该从'h'开始,而不是'1'。 –
您的第一个算法比第二个算法效率更高,而且它们不相同。第一个看起来不错,第二个看起来不错。 – assylias
你的第一个代码似乎是正确的。第二种方法似乎是为未排序的数组设计的。它需要为'h'的每个值重置'count'。 –