面試題彙總

2021-09-01 19:28:14 字數 581 閱讀 5900

1.題目:給定陣列a,大小為n,陣列元素為0到n-1的數字,不過有的數字出現了多次,有的數字沒有出現。請給出演算法和程式,統計哪些數字沒有出現,哪些數字出現了多少次。要求在o(n)的時間複雜度,o(1)的空間複雜度下完成。

解答:這種題目,既然只用這麼少的空間,要麼從異或角度考慮,相當於只能有乙個變數出現。要麼充分的利用給定的陣列空間。而且時間複雜度為o(n)的話,必然就是遍歷那個陣列了。

我們理解一下這個概念:

假如乙個陣列中某個數字是 a[i] = t ( 0<=t < n ),那麼 如果 a[i] = t + k*n,那麼我們是不是需要a[i]%n就可以還原為以前的陣列,而且 a[i] / k就可以求出k,是的,我們就利用這種思想來改造之前的陣列,然後求出這個k.

兩次遍歷陣列的方法:考慮a[i],現在的位置為i,如果採用a來計數,它的位置應該是a[i]%n,找到計數字置,處理這個計數字置的辦法就是加n.

第一次遍歷:對a[i]的計算位置加n,加n可以保證a[i]%n的是不變的

第二次遍歷:a陣列,最後每乙個元素表示為a[i] = x + k * n; 其中x#include int main()

}

}

面試題彙總

1.佇列先進先出,棧先進後出。2.對插入和刪除操作的 限定 棧是限定只能在表的一端進行插入和刪除操作的線性表。佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。從 資料結構 的角度看,它們都是線性結構,即資料元素之間的關係相同。3.遍歷資料速度不同。順序表是在記憶體中開闢一段連續的空間...

面試題彙總

1 integer和int的區別?2 和equals的區別?int a 50,integer b 50 a b?integer c 50,b c?3 get和post的區別?4 用執行緒池建立執行緒和自己建立執行緒的區別,好處是什麼?5 利用int型陣列實現乙個棧,並實現出棧和入棧操作?要求時間複雜...

面試題彙總

題目都是我自己寫的,所以也不一定是完全正確的,因為能有很多細節沒有考慮,如果大家發現了希望指正 1 完美世界2017 刪除vector中所有偶數 最想去的地方呀。void deleteeven vector v2 else if iter 2 0 else 2 編寫類string的建構函式,析構函式...