比如对于 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
}

本文介绍两种查找整数二进制表示中最高位1的索引的算法,一种为O(n)复杂度,通过不断右移直至找到最高位;另一种为O(logn)复杂度,使用二分查找法高效定位。示例展示了对于数值6和1956,如何快速准确地返回其二进制表示中最高位1的位置。
1399

被折叠的 条评论
为什么被折叠?



