[Swift]LeetCode136. 只出现一次的数字 | Single Number
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9714912.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1] Output: 1
Example 2:
Input: [4,1,2,1,2] Output: 4
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1] 输出: 1
示例 2:
输入: [4,1,2,1,2] 输出: 4
16ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var result = nums.first! 4 5 for index in 1..<nums.count { 6 result = result ^ nums[index] 7 } 8 9 return result; 10 } 11 }
48ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 // 2 * (a + b) - (a + b + a) = b 4 let set = Set(nums) 5 let setSum = set.reduce(0, +) 6 let arrSum = nums.reduce(0, +) 7 8 return 2 * setSum - arrSum 9 } 10 }
84ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var set = Set<Int>() 4 5 for item in nums 6 { 7 if set.contains(item) { 8 set.remove(item) 9 } 10 else 11 { 12 set.insert(item) 13 } 14 } 15 16 return set.popFirst()! 17 } 18 }
96ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 return nums.reduce(0, { $0^$1 }) 4 } 5 }
108ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var dict: [Int: Int] = [:] 4 5 for num in nums { 6 dict[num] = (dict[num] ?? 0) + 1 7 } 8 9 for num in dict.keys { 10 if dict[num] == 1 { 11 return num 12 } 13 } 14 15 return 0 16 } 17 }
112ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 4 return nums.reduce(0, ^) 5 } 6 }