面试题 05.03. 翻转数位-----位运算
题目表述
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例:
输入: num = 1775(110111011112)
输出: 8
位运算
双指针,利用与计算出num的0的位置,计算3个0间的位置差距,求出来最长序列即可。
class Solution {
public int reverseBits(int num) {
int res = 0;
int count = 0;
int left = 0;
int pre = -1;
int fast = 0;
for(;fast < 32; fast++){
int tmp = num & (1<<fast);
if(tmp == 0){
if(count == 0){
left = fast;
count++;
continue;
}
res = Math.max(res, fast - pre -1);
pre = left;
left = fast;
count++;
}
}
res = Math.max(res, fast - pre -1);
return res;
}
}
class Solution {
public int reverseBits(int num) {
int cur = 0;
int insert = 0;
int res = 1;
for(int i = 0; i < 32; i++){
if((num & (1 << i)) != 0){
cur += 1;
insert += 1;
}else{
insert = cur + 1;
cur = 0;
}
res = Math.max(res , insert);
}
return res;
}
}

浙公网安备 33010602011771号