缺失的數字;及找數字分析
今日面試題:缺失的數字
給定一個無序的整數陣列,怎麼找到第一個大於0,並且不在此陣列的整數。比如[1,2,0] 返回 3, [3,4,-1,1] 返回 2。最好能O(1)空間和O(n)時間。
=========================================================
找數字分析原題陣列A中,除了某一個數字x之外,其他數字都出現了三次,而x出現了一次。請給出最快的方法,找到x。
分析
乍一看這個題目,不少同學立馬給出了答案:異或。但舉個例子,就會發現,異或是行不通的,一般的方法是利用異或的的如下特性:
A xor A = 0
A xor 0 = A
但是這個題目中,數字都是奇數個的,直接採用之前類似題目的異或方法,已經不合適了。 除此之外,我們還可能想到如下的方法:
採用hashmap,時間複雜度O(n),空間複雜度O(n)
對陣列A進行排序,然後在遍歷一次,時間複雜度O(nlogn),空間複雜度O(1)
是否還有一些效果更好的方法呢?這一類的題目,即使簡單的異或不能解決,也可以從二進位制位、位操作方面去考慮,總之這樣的大方向是不會錯的。
題目中,如果陣列中的元素都是三個三個出現的,那麼從二進位制表示的角度,每個位上的1加起來,應該可以整除3。如果有一個數x只出現一次,會是什麼情況呢?
如果某個特定位上的1加起來,可以被3整除,說明對應x的那位是0,因為如果是1,不可能被3整除
如果某個特定位上的1加起來,不可以被3整除,說明對應x的那位是1
根據上面的描述,我們可以開闢一個大小為32的陣列,第0個元素表示,A中所有元素的二進位制表示的最低位的和,依次類推。最後,再轉換為十進位制數即可。這裡要說明的是,用一個大小為32的整數陣列表示,同樣空間是O(1)的。
不過這裡申請了一個陣列的空間,如果這個是不被允許的呢?請大家開動腦筋,我們會在後續的文章中分享。
【分析完畢】
本文來自微信:待字閨中,2013-09-09釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 遞推--找數字
- LeetCode:尋找丟失的數字LeetCode
- Python 英文的月份轉數字及數字轉英文Python
- 如何在1到100的整數陣列上找到缺失的數字陣列
- 每日一練(25): 0~n-1中缺失的數字
- 數字孿生的實現方案及可行性分析
- 數字對映:數字孿生技術的應用場景及作用
- 【數字化】數字化轉型是什麼、為什麼、怎麼辦;2018年數字化供應鏈行業及案例分析報告行業
- 數字經濟到底是什麼?從社群團購分析數字化
- 談談我的「數字文具盒」 - 數字基建
- 數字化智慧經營方法你找對了嗎?
- 中文數字與阿拉伯數字:數字符號的文化交融符號
- 【數字化】IDC首席分析師:這才是數字化轉型的本質!| 重磅必讀
- LeetCode - 1365 - 有多少小於當前數字的數字LeetCode
- 數字宋朝
- 猜數字
- 數字序列
- 數字藏品
- 數字加密加密
- 數字10的黑洞
- 數字5的黑洞
- 多幣種數字錢包開發及區塊鏈數字錢包系統區塊鏈
- “為場景找技術”:全球數字化轉型的大同之道
- 詳解數字簽名的含義及作用
- 數字藏品平臺開發數字藏品系統開發技術架構分析架構
- DMCreator:2020年印度數字營銷分析
- 數字化建設博物館的優勢分析
- 數字格式字串轉數字保留後面0字串
- jquery金額數字轉為大寫數字jQuery
- 中文數字阿拉伯數字相互轉換
- 衡量數字發展:事實和數字2020
- 關於數字藏品系統開發程式分析及玩法案例
- 數字,小數點正則,一段話提取數字
- 數字銀行:銀行數字化轉型的盡頭
- PHP 阿拉伯數字和中文數字的相互轉換PHP
- LeetCode1365有多少小於當前數字的數字LeetCode
- 【數字化】重新思考數字化時代的製造業
- JZ-070-數字序列中的某一位數字
- 數字商品DGE--數字經濟的財富黑馬