Google 面試題 | 哈明頓距離公告通知

九章演算法發表於2017-07-13

專欄 | 九章演算法
網址 | www.jiuzhang.com


題目描述

兩個整數之間的漢明距離是指,相應二進位制位不同的位置的數目。
給你兩個整數x和y,計算他們之間的漢明距離。
其中,0 ≤ x, y < 2^31.

樣例

輸入:
x = 1, y = 4

輸出:
2
樣例解釋
x = 1 ==> 0 0 0 1
y = 4 ==> 0 1 0 0
—————-↑—-↑
兩個數位的二進位制不同,所以答案為2.

解題思路

a.題目沒有要求空間複雜度,我們可以開兩個大小為31的陣列,將每個數都轉換成二進位制的形式,然後進行逐位比較並計算答案。

b.如果仔細思考可以發現,逐位比較兩個數其實不需要開陣列存放他們的二進位制的形式,在一個迴圈內對兩個數同時逐位比較即可,時間複雜度為O( log( max( x, y) ) )。下面給出這種解法的參考程式。

c.如果讀者瞭解位運算的知識,而且面試官要求優化程式碼執行速度,那麼參考程式碼中的模運算和除法運算均可以用位運算替代。

d.如果讀者知道按位異或的性質(相同為0,不同為1),那麼就可以想到如果將x和y進行異或操作,那麼我們最後只需利用位運算統計異或結果中 “1” 的個數即可。

參考程式


面試官角度分析

這是一道簡單難度的題,主要考察進位制轉換和語法的能力。這道題如果可以不開陣列計算出結果或者利用異或的性質計算出結果,那麼可以有hire的水平。如果運用位運算優化了程式碼,那麼還可以有strong hire的評價。

題目答案連結

www.jiuzhang.com/solution/ha…

相關題目

www.lintcode.com/zh-cn/probl…
www.lintcode.com/zh-cn/probl…

推薦閱讀



歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等

九章演算法,IT教育領域的深耕者
九章演算法,IT教育領域的深耕者

相關文章