力ボタン868.バイナリピッチC++bit set
6263 ワード
正の整数nが与えられ、nのバイナリ表現の2つの隣接する1間の最長距離が見つかり、返される.隣接する2つの1が存在しない場合は、0を返します.
0のみが2つの1点を隔てている場合(0は存在しない可能性がある)、この2つの1は互いに隣接していると考えられる.2つの1間の距離は、それらのバイナリ表現における位置の絶対差である.たとえば、1001の2つの1の距離は3です.
例1:
例2:
例3:
例4:
例5:
ヒント:
C++
0のみが2つの1点を隔てている場合(0は存在しない可能性がある)、この2つの1は互いに隣接していると考えられる.2つの1間の距離は、それらのバイナリ表現における位置の絶対差である.たとえば、1001の2つの1の距離は3です.
例1:
:n = 22
:2
:
22 "10110" 。
22 , 1, 1 。
1 , 1 2 。
1 , 1 1 。
, 2 。
例2:
:n = 5
:2
:
5 "101" 。
例3:
:n = 6
:1
:
6 "110" 。
例4:
:n = 8
:0
:
8 "1000" 。
8 1, 0 。
例5:
:n = 1
:0
ヒント:
1 <= N <= 10^9
C++
class Solution {
public:
int binaryGap(int n) {
bitset<32> res(n);
if(res.count() == 1) return 0;// 1 。
if(res.count() == 0) return 0;
int cur = 0, pre = 300000;//pre , cur - pre max
int mx = INT_MIN;
for(int i = 0; i <= 31; i++){
if(res.test(i) == true){
// i 1
cur = i;
mx = max(mx, cur - pre);
pre = cur;
}
}
return mx;
}
};