前言
今天算法的内容是:位运算
一、二进制间距
给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0。
如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。
一、思路:
(1)用一个变量用于表示是否存在二进制中1且存储上一个1,用另一个变量来存储实时位置(由于是一个二进制数所以不用担心是否会有 有1而前面是零的情况,会直接结束循环的 )
(2)进行循环判断,若符合1,进行一次1与1之间长度的判断 与 对存在变量的赋值,不符合则进行长度的右移与实时变量的增长;
二、源码
class Solution {
public:
int binaryGap(int n) {
int maxd=0;
int pre=-1,now=0;
while(n){
if(n&1){
if(pre!=-1){
maxd=max(now-pre,maxd);
}
pre=now;
}
n>>=1;
++now;
}
return maxd;
}
};
//英雄哥的代码
//我本来想 n转二进制存于数组内进行一个双指针判断的,也不是很熟就hh
三.知识点
位运算& ,>>
今天还是一题选手…😦