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]