numslen(nums)/2+1
我试图通过位操作来解决这个挑战,并得到了一个工作解决方案,它可以在non-negative整数上工作(请参阅下面的代码和测试输出)。在负数上,它返回负答案的绝对值。
我在这里失踪了什么?
我当前的代码如下:
func majorityElement(nums []int) int {
var bits [32]int // hash of bits
// for every number
for _, num := range nums {
// reading whether a bit is one for each register
for i := 0; i < 32; i++ {
// if yes, incrementing the counter in hash
if num&(1<<i) > 0 {
bits[i] += 1
}
}
}
result := 0
// restoring the majority number bit by bit back
for i := range bits {
// if the majority of ones => it's a 1, else 0 and do nothing
if bits[i] > len(nums)/2 { // 1
result |= 1 << i
}
}
return result
}
它产生以下结果:
true: want 3, got 3 for [3 2 3]
true: want 4, got 4 for [4 5 4]
true: want 2, got 2 for [2 2 1 1 1 2 2]
true: want 4, got 4 for [4 5 4]
false: want -2147483648, got 2147483648 for [-2147483648]