1. 程式人生 > >LeetCode260. 只出現一次的數字 III | Single Number III

LeetCode260. 只出現一次的數字 III | Single Number III

Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.

Example:

Input:  [1,2,1,3,2,5]
Output: [3,5]

Note:

  1. The order of the result is not important. So in the above example, [5, 3]
     is also correct.
  2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

給定一個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。

示例 :

輸入: [1,2,1,3,2,5]
輸出: [3,5]

注意:

  1. 結果輸出的順序並不重要,對於上面的例子, [5, 3] 也是正確答案。
  2. 你的演算法應該具有線性時間複雜度。你能否僅使用常數空間複雜度來實現?

76ms

 1 class Solution {
 2     func singleNumber(_ nums: [Int]) -> [Int] {
 3 
 4         var res = [0, 0]
 5         var diff = nums.reduce(0){$0 ^ $1}
 6         diff &= -diff
 7         for num in nums {
 8             if num & diff != 0 {
 9                 res[0] ^= num
10 } 11 else { 12 res[1] ^= num 13 } 14 } 15 return res 16 } 17 }

76ms

 1 class Solution {
 2     func singleNumber(_ nums: [Int]) -> [Int] {
 3         guard nums.count > 1 else {
 4             return nums
 5         }
 6         
 7         var result = nums[0]
 8         for num in nums[1...] {
 9             result ^= num
10         }
11         
12         var num1 = 0, num2 = 0, tmp = 1
13         while (result & tmp) == 0 {
14             tmp <<= 1
15         }
16         
17         for num in nums {
18             if (num & tmp) > 0 {
19                 num1 ^= num
20             }
21             else {
22                 num2 ^= num
23             }
24         }
25         
26         return [num1, num2]
27     }
28 }

80ms

 1 class Solution {
 2     func singleNumber(_ nums: [Int]) -> [Int] {
 3         var s: Set<Int> = Set(minimumCapacity: nums.count)
 4         for i in nums {
 5             if s.contains(i) {
 6                 s.remove(i)
 7             } else {
 8                 s.insert(i)
 9             }
10         }
11         return Array(s)
12     }
13 }

84ms

 1 class Solution {
 2     func singleNumber(_ nums: [Int]) -> [Int] {
 3         var array = nums.sorted()
 4         // print(array)
 5         var output:[Int] = []
 6         
 7         var i = 0
 8         while i < array.count {
 9             if i == array.count - 1 || array[i] != array[i+1] {
10                 output.append(array[i])
11             } else {
12                 i += 1
13             }
14             i += 1
15             if output.count > 1 {
16                 break
17             }
18         }
19         
20         return output
21     }
22 }

84ms

 1 class Solution {
 2     func singleNumber(_ nums: [Int]) -> [Int] {
 3         var result = [Int]()
 4         var temp = nums.sorted()
 5         for i in 0..<temp.count {
 6             if i == 0 {
 7                 if temp[i] != temp[i+1] {
 8                     result.append(temp[i])
 9                 }
10             } else if i == temp.count - 1{
11                 if temp[i] != temp[i-1] {
12                     result.append(temp[i])
13                 }
14             }
15             else {
16                 if temp[i] != temp[i-1] && temp[i] != temp[i+1]{
17                     result.append(temp[i])
18                 }
19             }
20         }
21         return result
22     }
23 }