【題目描述】
給定一個(gè)正整數(shù) N,找到并返回 N 的二進(jìn)制表示中兩個(gè)連續(xù)的 1 之間的最長(zhǎng)距離蓝厌。
如果沒有兩個(gè)連續(xù)的 1诞帐,返回 0 角雷。
【示例1】
輸入:22
輸出:2
解釋:
22 的二進(jìn)制是 0b10110 祸穷。
在 22 的二進(jìn)制表示中,有三個(gè) 1勺三,組成兩對(duì)連續(xù)的 1 雷滚。
第一對(duì)連續(xù)的 1 中,兩個(gè) 1 之間的距離為 2 吗坚。
第二對(duì)連續(xù)的 1 中祈远,兩個(gè) 1 之間的距離為 1 。
答案取兩個(gè)距離之中最大的商源,也就是 2 车份。
【示例2】
輸入:5
輸出:2
解釋:
5 的二進(jìn)制是 0b101 。
【示例3】
輸入:6
輸出:1
解釋:
6 的二進(jìn)制是 0b110 牡彻。
【示例4】
輸入:8
輸出:0
解釋:
8 的二進(jìn)制是 0b1000 扫沼。
在 8 的二進(jìn)制表示中沒有連續(xù)的 1,所以返回 0 庄吼。
提示 1 <= N <= 10^9
【思路】
1缎除、題目有點(diǎn)誤導(dǎo)人
2、就是求兩個(gè)1之間的距離的最大值
3总寻、時(shí)間復(fù)雜度O(n)
4器罐、空間復(fù)雜度O(n)
Swift代碼實(shí)現(xiàn):
func binaryGap(_ N: Int) -> Int {
if N == 0 { return 0 }
var res = [Int]()
let bArr = String(N,radix: 2)
for (i,c) in bArr.enumerated() {
if c == "1" {
res.append(i)
}
}
var m = 0
for i in 1..<res.count {
m = max(m, res[i]-res[i-1])
}
return m
}