假设我们有一个数字n,我们必须找到其二进制表示形式中最长的连续游程1s的长度。
因此,如果输入类似于n = 312,则输出将为3,因为312是二进制的100111000,并且有3个连续的1。
为了解决这个问题,我们将遵循以下步骤-
ret:= 0,len:= 0
对于初始化i:= 0,当i <32时,更新(将i增加1),请执行以下操作:
len:= 0
(将len增加1)
如果n / 2为奇数,则
除此以外
ret:= ret和len的最大值
返回ret
让我们看下面的实现以更好地理解:
源代码(C ++)-
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(int n) { int ret = 0; int len = 0; for(int i = 0; i < 32; i++){ if((n >> i) & 1){ len++; }else{ len = 0; } ret = max(ret, len); } return ret; } }; main(){ Solution ob; cout << ob.solve(312); }
312
输出结果
3