我想找到的大多數陣列(數字出現的大部分時間)。 我有一個排序後的數組,並使用這些循環:錯誤在哪裏?發現大多數
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'。 –