力ボタン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:
  :n = 22222       "10110"221111        211        1 。
            ,    2

例2:
  :n = 525       "101"

例3:
  :n = 616       "110"

例4:
  :n = 808       "1000"8                10

例5:
  :n = 10

ヒント:
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;
    }
};