给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。
如果没有两个连续的 1,返回 0 。 示例 1:输入:22输出:2解释:22 的二进制是 0b10110 。在 22 的二进制表示中,有三个 1,组成两对连续的 1 。第一对连续的 1 中,两个 1 之间的距离为 2 。第二对连续的 1 中,两个 1 之间的距离为 1 。答案取两个距离之中最大的,也就是 2 。示例 2:输入:5输出:2解释:5 的二进制是 0b101 。示例 3:输入:6输出:1解释:6 的二进制是 0b110 。示例 4:输入:8输出:0解释:8 的二进制是 0b1000 。在 8 的二进制表示中没有连续的 1,所以返回 0 。 提示: 1 <= N <= 10^9来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-gap著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { public int binaryGap(int n) { if(n<=2) return 0; int right = 0; int left = 0; int idx = 0; int res = 0; while(n>0){ idx++; if((n&1)==1){ int temp = left; left = idx; if(right == 0) right = left; else right = temp; res = Math.max(res,left-right); } n=n>>1; } return res; }}