问题描述
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,"1001" 中的两个 1 的距离为 3 。
示例
分析
根据题意进行模拟,用last记录下前一个遇到1的位置,当后面再遇到1时计算二者之间的距离并更新last。
可使用 位与(&) 来比较二进制最后一位是否为1,一轮比较完毕后将 n 进行位运算右移一位。
代码实现
class Solution {
public int binaryGap(int n) {
int last = -1,ans = 0;
for (int i = 0; n != 0; i++) {
if ((n & 1) == 1) {
if (last != -1)
ans = Math.max(ans,i - last);
last = i;
}
n >>= 1;
}
return ans;
}
}