比如对于 6,输出应该是 3(6 的二进制表示是 110);对于 1956,输出应该是 11(1956 的二进制表示是 11110100100)。
1、O(n) 复杂度
func IdxOfHighestOne(value int) int {
var res = 0
for value != 0 {
res++
value = value >> 1
}
return res
}
2、O(logn) 复杂度
func IdxOfHighestOne(value int) int {
left := 32
right := 1
m := 1 << 32 - 1
for left > right {
mid := (left + right) / 2
mask := m << (mid-1) & m
v := mask & value >> (mid - 1)
if v > 1 {
right = mid
} else if v == 1 {
return mid
} else if v == 0 {
left = mid
}
}
return 1
}