有一組數字,範圍 1 到 n,隨機移除 3 個數字並打亂順序,存放在長度為 n-3 的數組中。要求找出這 3 個缺失的數字,n 假設為 10000,追求時間效率較高的算法。
利用額外空間換取 O(n) 時間複雜度:
B,初始化為 0A,對應位置標記為 1:B[A[i]] = 1B,值為 0 的下標即為缺失數字void missnum(int A[], int n_minus_3) {
int B[n+1] = {0};
for (int i = 0; i < n_minus_3; i++) {
B[A[i]] = 1;
}
for (int i = 1; i <= n; i++) {
if (B[i] != 1)
printf("%d ", i); // 輸出缺失的數
}
}
摘自 我在這裡