Given a positive integer N
, find and return the longest distance between two consecutive 1's in the binary representation of N
.java
If there aren't two consecutive 1's, return 0.數組
Example 1:code
Input: 22 Output: 2 Explanation: 22 in binary is 0b10110. In the binary representation of 22, there are three ones, and two consecutive pairs of 1's. The first consecutive pair of 1's have distance 2. The second consecutive pair of 1's have distance 1. The answer is the largest of these two distances, which is 2.
Example 2:three
Input: 5 Output: 2 Explanation: 5 in binary is 0b101.
Example 3:leetcode
Input: 6 Output: 1 Explanation: 6 in binary is 0b110.
Example 4:get
Input: 8 Output: 0 Explanation: 8 in binary is 0b1000. There aren't any consecutive pairs of 1's in the binary representation of 8, so we return 0.
Note:it
1 <= N <= 10^9
題目地址io
首先必定要理解題目的意思,題目的意思是兩個連續1之間的最大距離,好比11,最大距離是1,10001最大距離是4.class
而後簡單的作法是,記錄每一個1的座標,而後算最大的差值。但這樣要額外掃描一遍座標數組。di
個人代碼作到了只掃描一遍N,須要三個值進行記錄,index記錄是否掃描到1,count記錄每一段1的距離,max記錄最大距離。
class Solution { public int binaryGap(int N) { int index=0; int count=0; int max=0; int temp = N; while(temp>0){ if(temp%2==1){ if(index==1){ count++; max = max<count?count:max; count=0; }else{ index = 1; } }else{ if(index==1){ count++; max = max<count?count:max; } } temp >>= 1; } return max; } }