★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-qiymfbsd-me.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one.git
Note:github
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?算法
Example 1:數組
Input: [2,2,3,2] Output: 3
Example 2:微信
Input: [0,1,0,1,0,1,99] Output: 99
給定一個非空整數數組,除了某個元素只出現一次之外,其他每一個元素均出現了三次。找出那個只出現了一次的元素。app
說明:spa
你的算法應該具備線性時間複雜度。 你能夠不使用額外空間來實現嗎?code
示例 1:htm
輸入: [2,2,3,2] 輸出: 3
示例 2:
輸入: [0,1,0,1,0,1,99] 輸出: 99
12ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 let count = nums.count 4 guard count > 0 else { return 0 } 5 let range = 1..<count 6 var oneTime = nums[0] 7 var twoTimes = 0 8 var notThreeTimes = 0 9 for i in range { 10 let next = nums[i] 11 twoTimes |= oneTime & next 12 oneTime ^= next 13 notThreeTimes = ~(oneTime & twoTimes) 14 oneTime &= notThreeTimes 15 twoTimes &= notThreeTimes 16 } 17 return oneTime 18 } 19 }
16ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var a = 0, b = 0; 4 for num in nums { 5 b = (b ^ num) & ~a; 6 a = (a ^ num) & ~b; 7 } 8 return b; 9 } 10 }
24ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 guard nums.count > 0 else { 4 return 0 5 } 6 7 var temp = [Int: Int]() 8 9 for num in nums { 10 temp[num] = temp[num, default: 0] + 1 11 } 12 13 for key in temp.keys { 14 if temp[key]! == 1 { 15 return key 16 } 17 } 18 19 return 0 20 } 21 }
28ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var resSet = Set<Int>(nums) 4 var showed = Set<Int>() 5 for num in nums { 6 if showed.contains(num) { 7 resSet.remove(num) 8 } 9 showed.insert(num) 10 } 11 return resSet.first! 12 } 13 }
76ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 var numDict = [Int: Int]() 4 for num in nums { 5 if let value = numDict[num] { 6 numDict[num] = value + 1 7 } else { 8 numDict[num] = 1 9 } 10 } 11 12 let singleVal = numDict.filter { $0.value == 1 }.first! 13 return singleVal.key 14 } 15 }
80ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 return ((Set(nums).reduce(0,+) * 3) - nums.reduce(0,+))/2 4 } 5 }
80ms
1 class Solution { 2 func singleNumber(_ nums: [Int]) -> Int { 3 guard nums.count > 0 else { 4 return 0 5 } 6 var result = 0 7 for i in 0..<MemoryLayout<Int>.size * 8 { 8 var count = 0 9 for j in 0..<nums.count { 10 count += (nums[j] >> i) & 1 11 } 12 13 result += (count % 3) << i 14 } 15 16 return result 17 } 18 }