49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
/*
|
||
* @Author : huangzj
|
||
* @Time : 2021/3/18 13:08
|
||
* @Description:
|
||
*/
|
||
|
||
package NumberCount
|
||
|
||
type OnlyOneNumberOtherKObj struct{}
|
||
|
||
func (*OnlyOneNumberOtherKObj) Doc() string {
|
||
return `
|
||
给定一个整型数组 arr和一个大于1的整数k。已知 arr中只有1个数出现了1次,其他的数都出现了k次,请返回只出现了1次的数。
|
||
|
||
【要求】
时间复杂度为 O(N),额外空间复杂度为 O(1)。
|
||
`
|
||
}
|
||
|
||
func OnlyOneNumberOtherK(numList []int, k int) int {
|
||
bitList := make([]int, 32)
|
||
for _, num := range numList {
|
||
//把每个数字转换成二进制
|
||
store := make([]int, 32)
|
||
for i := 0; num != 0; i++ {
|
||
store[i] = num % k
|
||
num = num / k
|
||
}
|
||
|
||
for j := 0; j < 32; j++ {
|
||
//不进位加法
|
||
bitList[j] = (store[j] + bitList[j]) % k
|
||
}
|
||
}
|
||
|
||
//k进制转换回十进制
|
||
power := 1 //k的次方值
|
||
result := 0 //只出现一次的数字
|
||
for i, bit := range bitList {
|
||
power = 1
|
||
for j := 0; j < i; j++ {
|
||
power = power * k
|
||
}
|
||
|
||
result = result + power*bit
|
||
}
|
||
|
||
return result
|
||
}
|