leetcode刷題筆記 260題 只出現一次的數字 III
阿新 • • 發佈:2020-11-04
leetcode刷題筆記 260題 只出現一次的數字 III
問題描述:
給定一個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。
示例 :
輸入: [1,2,1,3,2,5]
輸出: [3,5]
注意:結果輸出的順序並不重要,對於上面的例子, [5, 3] 也是正確答案。
你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?
/* 對於可重複出現2次或偶數次的數,需要考慮到異或方法 由於本題存在兩個只出現一次的數,因此對全部數異或的話,最終結果為兩個只出現一次的數的異或 由於這兩個數不相同,其二進位制表達至少存在一位不同 對ab異或結果逐位與1取,獲取區別位 而後對整個nums總右移K位(即區別位)與1取或值為0 或為1的所有數進行異或,最終結果可以分別得到兩個只出現一次的數 */ object Solution { def singleNumber(nums: Array[Int]): Array[Int] = { var ab = 0 for (num <- nums) { ab ^= num } var k = 0 while ((ab >> k & 1) == 0) k += 1 def get(nums: Array[Int], k: Int, t: Int): Int = { var res = 0 for (num <- nums) { if ((num >> k & 1) == t){ res ^= num } } return res } return Array(get(nums, k, 0), get(nums, k, 1)) } }