缺失的數字;及找數字分析
今日面試題:缺失的數字
給定一個無序的整數陣列,怎麼找到第一個大於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釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 找數字續;及缺失的數字分析
- 找數字;及最長等差數列分析
- 括號匹配;及找數字續分析
- 格點數目;及兄弟數字分析
- 重排陣列;及消失的數字分析陣列
- 兄弟數字;及修理柵欄分析
- Python 英文的月份轉數字及數字轉英文Python
- 數字遊戲;及螞蟻螞蟻分析遊戲
- 如何在1到100的整數陣列上找到缺失的數字陣列
- LeetCode:尋找丟失的數字LeetCode
- 消失的數字;及格點數目分析
- 七夕鵲橋;及數字遊戲分析遊戲
- 【zz】面試題之尋找丟失的數字面試題
- 找最大數;及序列生成分析
- 數字孿生的實現方案及可行性分析
- 【.Net】從字串陣列中尋找數字的元素字串陣列
- 數字對映:數字孿生技術的應用場景及作用
- 分析破解數字五筆3.0 (2千字)
- 分析:中國數字出版現狀
- 數字經濟到底是什麼?從社群團購分析數字化
- 分析:數字內容的反向付費
- 給定數字生成中文數字(MySQL)MySql
- 數字化智慧經營方法你找對了嗎?
- 中文數字與阿拉伯數字:數字符號的文化交融符號
- Shell下的數字比較及計算
- 從數字鴻溝到數字貧困:負面影響及改進策略
- 數字遊戲遊戲
- 數字加密加密
- 數字序列
- 【數字化】重新思考數字化時代的製造業
- 【數字化】數字化轉型是什麼、為什麼、怎麼辦;2018年數字化供應鏈行業及案例分析報告行業
- JavaScript中的數字JavaScript
- 中文數字阿拉伯數字相互轉換
- 數字格式字串轉數字保留後面0字串
- jquery金額數字轉為大寫數字jQuery
- 多幣種數字錢包開發及區塊鏈數字錢包系統區塊鏈
- oracle 一欄位 資料存在數字和漢字,只提取數字的sqlOracleSQL
- “為場景找技術”:全球數字化轉型的大同之道