問題詳情
有2n+1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o(n)的時間複雜度,o(1)的空間複雜度。高階問題:如果有2n+2個數,其中有2個數落單,該怎麼辦?
解答 答:
初階:將2n+1個數異或起來,相同的數會抵消,異或的答案就是要找的數。
高階:假設兩個不同的數是a和b,並且a!=b,將2n+2個數異或起來就會得到c=a xor b,並且c不等於0。因此在c的二進位制位中找到乙個為1的位,可推斷在這位上a和b分別為0和1,因此將2n+2個數分為該位位0的組和該位為1的組,兩組中各自會包含2n』+1個數和2n』』+1個數,用初階的演算法即可解決。
面試官角度:
該問題的考點,在於異或符號的運用。異或運算是計算機系的基礎知識。上過課的同學一般來會答得上第一問。
第二問會不會被問到看面試官心情。一般來說,對於乙個問題的擴充套件問題,解題的思路是如何將它通過一定的變換轉換為初級問題。因此就要去想怎麼分為兩組,兩組各包含2x+1個數就問題得解。會初階問題以後,基本上會想到把所有數異或起來,得到a xor b。再根據題目中的題目a與b不同,意味著該值不為0,從而想到根據該值的二進位制位為1的位來將2n+2個數分為兩組。
面試題1 落單的數
有2n 1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o n 的時間複雜度,o 1 的空間複雜度。高階問題 如果有2n 2個數,其中有2個數落單,該怎麼辦?答 初階 將2n 1個數異或起來,相同的數會抵消,異或的答案就是要找的數。高階 假設兩個不同的數是a和b,並且a b,將2n 2個數...
九章演算法面試題1 落單的數
初階 有2n 1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o n 的時間複雜度,o 1 的空間複雜度。高階 如果有2n 2個數,其中有2個數落單,該怎麼辦?初階 將2n 1個數異或起來,相同的數會抵消,異或的答案就是要找的數。高階 假設兩個不同的數是a和b,並且a b,將2n 2個數異...
面試題1 兩數之和 1
題目 給定乙個整型陣列,能否找到找出其中的兩個數使其和為某個指定的值?這個陣列是無序的 直接實現 暴力解決 暴力破解,o n 2 的時間複雜度 func hassum arr int,target int bool return false 書中給出的核心思想是 先將無序的進行排序 從小到大 然後首...