feat(Go-Tool):2021/03/18:新增超过半数数字系列算法题,新增出现次数不同的数字系列算法题
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* @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
|
||||
}
|
||||
Reference in New Issue
Block a user