騰訊面試題,如何尋找乙個陣列裡面唯一不重複的元素 要求時間複雜度o(n)和空間複雜度o(1)

時間 2021-05-09 07:02:37

1樓:人生戰略規劃局

intfind

(int

arr)

return

tmp;}

2樓:lvxiaoxin

異或。如果重複次數是偶數: 連續進行異或運算,最後的結果就是。這樣一次遍歷,且不需要輔助空間。

如果重複次數是奇數次,可以利用經典的partition,將其分開,分開的標準可以是比如,二進位制中某一位是1。然後同情況一進行解決。

3樓:都是你的錯

這個我感覺應該是考慮複雜度的概念,假設陣列元素可用m個位表示,那就分配一塊2^m大小的記憶體定義成陣列B,元素為乙個位元組的型別,這個陣列大小與n無關,所以空間複雜度是o(1),然後先初始化B中元素全為0,遍歷原陣列(定義成A),每次把B[A[i]]元素作如下操作: 1. 若B中元素為0或者1,則對應元素增1;

2. 若B中元素為大於1的元素,則不對B進行操作。

A遍歷結束後再找出B中值為1對應的陣列索引,就是`唯一乙個元素'的的二進位制值。

這些操作都完全合題意,只是適用場合好像只在m較小,n較大時適用。如果能對輸入資料先做適當的編碼成較短位表示,以後再解碼,可以稍微擴充適用場合。

4樓:lawrence

有好多答主已經正面回答了你的問題:bit operation。不過一般尋找更優異的演算法,必須要有一定的優化思路

比如dp中由於有大量重複的子問題,則保留子問題的解。從這點來說,沒有啥提示(優化思路)、也沒遇到過同樣的題的情況下,很難想出較優解。

因此,我建議你可以在面試時直接向面試官要優化思路

5樓:

異或運算你不知道?

除了找單這個應用,還可以交換數字,和其他位運算組合起來,還可以幹其他的事情。

不過,如果裡邊是uuid型別的字串,或者是double小數,或者無理數,或者物件例項,這種做法就不成立了,幾乎所有資料型別都可以序列化,然後用字典樹做較優方案,空間時間以及通用性綜合考察。

6樓:Ehekatl

若其他元素都出現過偶數次的話,這就是個白給題...直接xor起來,偶數次的都會被消掉,剩下乙個

如果有奇數次的話,感覺空間o(1)真不好搞

7樓:旅行者

如果已知重複元素都是k個

那麼可以遍歷每個元素每個bit位上1的數量。

最後計數不是k的整數倍的位置是1,是整數倍的是0。

雖然嚴格來說這個不是常數,因為要記錄的計數數量和陣列的最大值有關係,不過一般來說就認為這個是常數了吧。

8樓:墨雨蕭軒

如果題目裡說的重複指的是恰好出現兩次,那麼直接O(n)把陣列裡的元素都異或(xor)起來就行,得到的結果就是那個唯一的不重複的元素。

我今天去面試了,遇到乙個面試題,spring單例bean是執行緒安全的嗎?

VKgg Spring中的預設單例bean是,並沒有對單例bean進行執行緒安全的封裝,單例bean可以分為是否有狀態,也就是說是否進行資料儲存,無狀態情況下,就是不進行資料儲存,此時在多執行緒下是安全的,當有狀態時,進行資料儲存,是非執行緒安全,此時可以更改bean的scope屬性值為protot...

請教大家乙個問題,如何把乙個陣列中的相同元素挑選出來,組成另外的陣列或者list

MMMartt 函式 瞎寫 式 js const concat curr other v,vs v undefined concat curr curr 0 v?v,curr v curr v other,vs curr other const getResult arr concat arr so...

如何找出乙個陣列中兩個不相鄰元素的和的最大值

TiiWoo include 遍歷一遍,O n 的複雜度 include using namespace std const intINF 1e9 intn intarr 110 int ans,tmp,maxx INF intmain cout endl return0 Aperodry 先從陣列...