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 先從陣列...