愛奇藝筆試題:
原題是:已知一個數組A[],大小爲N,其中每個數都爲1~N,請求出該數組中未出現的數字和出現多次的數字。
要求是時間複雜度爲O(N),空間複雜度爲O(1)
這道題的關鍵點就在於空間複雜度爲O(1),本來想到的2-bitmap因爲這點也不能實現了。
void appears(int r[], int n) {
int i;
for (i = 0; i < n; ++i)
r[(r[i] - 1) % n] += n;
cout << "未出現的數字爲: ";
for (i = 0; i < n; ++i)
if ((r[i] - 1) / n == 0)
cout << i + 1 << " ";
cout << endl;
cout << "出現多次數字爲: ";
for (i = 0; i < n; ++i)
if ((r[i] - 1) / n > 1)
cout << i + 1 << " ";
cout << endl;
}