基於一個this邏輯給出了對不同(類似)問題的SO的答案,爲了在O(N)時間複雜度中刪除數組中的重複數字,我在C中實現了該邏輯,如下所示。但我的代碼的結果不會返回唯一的數字。我嘗試過調試,但無法獲得它的邏輯來解決這個問題。這段代碼中的錯誤是什麼?
int remove_repeat(int *a, int n)
{
int i, k;
k = 0;
for (i = 1; i < n; i++)
{
if (a[k] != a[i])
{
a[k+1] = a[i];
k++;
}
}
return (k+1);
}
main()
{
int a[] = {1, 4, 1, 2, 3, 3, 3, 1, 5};
int n;
int i;
n = remove_repeat(a, 9);
for (i = 0; i < n; i++)
printf("a[%d] = %d\n", i, a[i]);
}
1]在上面的代碼中刪除重複項有什麼不正確。
2]此問題的任何其他O(N)或O(NlogN)解決方案。它的邏輯?
當你嘗試調試時你學到了什麼? –
你的意圖不清楚。我很清楚它不起作用,請用你自己的話來描述你想要編碼的東西。 – Drakosha
@Cody - 這個邏輯試圖建立一個從0到j唯一數字的子數組。 – goldenmean