diff --git a/lcci/17.19.Missing Two/README.md b/lcci/17.19.Missing Two/README.md index 64ae1460d273d..307770e9a3b31 100644 --- a/lcci/17.19.Missing Two/README.md +++ b/lcci/17.19.Missing Two/README.md @@ -142,6 +142,42 @@ func missingTwo(nums []int) []int { } ``` +```swift +class Solution { + func missingTwo(_ nums: [Int]) -> [Int] { + let n = nums.count + 2 + var xor = 0 + + for num in nums { + xor ^= num + } + + for i in 1...n { + xor ^= i + } + + let diff = xor & (-xor) + + var a = 0 + + for num in nums { + if (num & diff) != 0 { + a ^= num + } + } + + for i in 1...n { + if (i & diff) != 0 { + a ^= i + } + } + + let b = xor ^ a + return [a, b] + } +} +``` + diff --git a/lcci/17.19.Missing Two/README_EN.md b/lcci/17.19.Missing Two/README_EN.md index 31be29535a171..57839d0d5b15c 100644 --- a/lcci/17.19.Missing Two/README_EN.md +++ b/lcci/17.19.Missing Two/README_EN.md @@ -135,6 +135,42 @@ func missingTwo(nums []int) []int { } ``` +```swift +class Solution { + func missingTwo(_ nums: [Int]) -> [Int] { + let n = nums.count + 2 + var xor = 0 + + for num in nums { + xor ^= num + } + + for i in 1...n { + xor ^= i + } + + let diff = xor & (-xor) + + var a = 0 + + for num in nums { + if (num & diff) != 0 { + a ^= num + } + } + + for i in 1...n { + if (i & diff) != 0 { + a ^= i + } + } + + let b = xor ^ a + return [a, b] + } +} +``` + diff --git a/lcci/17.19.Missing Two/Solution.swift b/lcci/17.19.Missing Two/Solution.swift new file mode 100644 index 0000000000000..dc8e26c9e7b82 --- /dev/null +++ b/lcci/17.19.Missing Two/Solution.swift @@ -0,0 +1,33 @@ +class Solution { + func missingTwo(_ nums: [Int]) -> [Int] { + let n = nums.count + 2 + var xor = 0 + + for num in nums { + xor ^= num + } + + for i in 1...n { + xor ^= i + } + + let diff = xor & (-xor) + + var a = 0 + + for num in nums { + if (num & diff) != 0 { + a ^= num + } + } + + for i in 1...n { + if (i & diff) != 0 { + a ^= i + } + } + + let b = xor ^ a + return [a, b] + } +} \ No newline at end of file