二进制间距
-
题目:给定一个正整数
n
,找到并返回n
的二进制表示中两个相邻1
之间的最长距离 。如果不存在两个相邻的1
,返回0
。 -
如果只有
0
将两个1
分隔开(可能不存在0
),则认为这两个1
彼此 相邻 。两个1
之间的距离是它们的二进制表示中位置的绝对差。例如,"1001"
中的两个1
的距离为3
。
// 双指针法
func binaryGap(n int) int {
s := fmt.Sprintf("%b", n)
distance, temp := 0, 0
for i := 0; i < len(s); i++ {
if s[i] == '0' {
continue
}
for j := i+1; j < len(s); j++ {
if s[i] == s[j] {
temp = j - i
break
}
}
if temp > distance {
distance = temp
}
}
return distance
}
// 双指针优化法,记录上次1出现的位置,但是内存消耗更大???
func binaryGap(n int) int {
s := fmt.Sprintf("%b", n)
distance, last := 0, 0
for i := 1; i < len(s); i++ {
if s[i] == '1' {
if i-last > distance {
distance = i - last
}
last = i
}
}
return distance
}