只出现一次的数 添加Go语言代码
parent
d9e076483c
commit
8d552eb9d4
|
@ -55,6 +55,26 @@ class Solution {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Go Code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func singleNumber(nums []int) int {
|
||||||
|
if len(nums) == 1 {
|
||||||
|
return nums[0]
|
||||||
|
}
|
||||||
|
m := map[int]int{}
|
||||||
|
for _, x := range nums {
|
||||||
|
m[x]++
|
||||||
|
}
|
||||||
|
for k, v := range m {
|
||||||
|
if v == 1 {
|
||||||
|
return k
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### 排序搜索法
|
### 排序搜索法
|
||||||
|
|
||||||
#### 解析
|
#### 解析
|
||||||
|
@ -86,6 +106,25 @@ class Solution {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Go Code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func singleNumber(nums []int) int {
|
||||||
|
if len(nums) == 1 {
|
||||||
|
return nums[0]
|
||||||
|
}
|
||||||
|
sort.Ints(nums)
|
||||||
|
for i := 1; i < len(nums) - 1; i+=2 {
|
||||||
|
if nums[i] == nums[i - 1] {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
return nums[i - 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nums[len(nums) - 1]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### HashSet
|
### HashSet
|
||||||
|
@ -234,4 +273,17 @@ class Solution {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Go Code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func singleNumber(nums []int) int {
|
||||||
|
res := 0
|
||||||
|
for _, x := range nums {
|
||||||
|
res ^= x
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
本题一共介绍了6种解题方法,肯定还有别的方法,欢迎大家讨论。大家可以在做题的时候一题多解。这样能大大提高自己解题能力。下面我们来看一下这些方法如何应用到其他题目上。
|
本题一共介绍了6种解题方法,肯定还有别的方法,欢迎大家讨论。大家可以在做题的时候一题多解。这样能大大提高自己解题能力。下面我们来看一下这些方法如何应用到其他题目上。
|
|
@ -92,6 +92,27 @@ class Solution {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Go Code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func singleNumber(nums []int) int {
|
||||||
|
res := 0
|
||||||
|
// Go语言中,int占32位以上
|
||||||
|
for i := 0; i < 64; i++ {
|
||||||
|
cnt := 0
|
||||||
|
for j := 0; j < len(nums); j++ {
|
||||||
|
if (nums[j] >> i & 1) == 1 {
|
||||||
|
cnt++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if cnt % 3 != 0{
|
||||||
|
res = res | 1 << i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
我们来解析一下我们的代码
|
我们来解析一下我们的代码
|
||||||
|
|
||||||
> **<<** 左移动运算符:运算数的各二进位全部左移若干位,由 **<<** 右边的数字指定了移动的位数,高位丢弃,低位补0。
|
> **<<** 左移动运算符:运算数的各二进位全部左移若干位,由 **<<** 右边的数字指定了移动的位数,高位丢弃,低位补0。
|
||||||
|
|
|
@ -111,3 +111,26 @@ class Solution {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Go Code:
|
||||||
|
|
||||||
|
```go
|
||||||
|
func singleNumber(nums []int) []int {
|
||||||
|
temp := 0
|
||||||
|
for _, x := range nums {
|
||||||
|
temp ^= x
|
||||||
|
}
|
||||||
|
// 保留最后那个1,为了区分两个数
|
||||||
|
group := temp & (^temp + 1)
|
||||||
|
|
||||||
|
res := make([]int, 2)
|
||||||
|
for _, x := range nums {
|
||||||
|
if group & x == 0{
|
||||||
|
res[0] ^= x
|
||||||
|
} else {
|
||||||
|
res[1] ^= x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue