# 只出现一次的数字 II
---
- 剑指 Offer 56 - II. 数组中数字出现的次数 II
```javascript=
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2]
输出: 3
示例 2:
输入: [0,1,0,1,0,1,99]
输出: 99
```
:::success
```go=
// map特性, key唯一
func singleNumber(nums []int) int {
maps := make(map[int]int, 0)
resp := -1
count := 1
for i := 0; i < len(nums); i++ {
_, ok := maps[nums[i]]
if !ok {
maps[nums[i]] = count
} else {
maps[nums[i]] = count + 1
}
}
for key, value := range maps {
if value == 1 {
resp = key
break
}
}
return resp
}
// 数学公式
func singleNumber(nums []int) int {
newArr := removeRepeatedElement(nums)
a , b := sumArray(newArr, 0), sumArray(nums, 0)
return math(a, b)
}
func math(a, b int) int {
return (a * 3 - b) / 2
}
func sumArray(arr []int, sum int) int {
for _, val := range arr {
sum += val
}
return sum
}
func removeRepeatedElement(arr []int) []int{
result := make([]int, 0)
for i := 0; i < len(arr); i++ {
flag := false
for j := i + 1; j < len(arr); j++ {
if arr[i] == arr[j] {
flag = true
break
}
}
if !flag {
result = append(result, arr[i])
}
}
return result
}
// 位运算
func singleNumber(nums []int) int {
var a, b int
for _, num := range nums {
a = ^b & (a ^ num)
b = ^a & (b ^ num)
}
return a
}
```
:::
###### tags: `LeeCode`