| comments | true |
|---|---|
| difficulty | Easy |
| edit_url | https://github.com/doocs/leetcode/edit/main/lcci/05.03.Reverse%20Bits/README_EN.md |
You have an integer and you can flip exactly one bit from a 0 to a 1. Write code to find the length of the longest sequence of 1s you could create.
Example 1:
Input:
num= 1775(110111011112)Output: 8
Example 2:
Input:
num= 7(01112)Output: 4
We can use two pointers
Finally, return the maximum length.
The time complexity is
class Solution:
def reverseBits(self, num: int) -> int:
ans = cnt = j = 0
for i in range(32):
cnt += num >> i & 1 ^ 1
while cnt > 1:
cnt -= num >> j & 1 ^ 1
j += 1
ans = max(ans, i - j + 1)
return ansclass Solution {
public int reverseBits(int num) {
int ans = 0, cnt = 0;
for (int i = 0, j = 0; i < 32; ++i) {
cnt += num >> i & 1 ^ 1;
while (cnt > 1) {
cnt -= num >> j & 1 ^ 1;
++j;
}
ans = Math.max(ans, i - j + 1);
}
return ans;
}
}class Solution {
public:
int reverseBits(int num) {
int ans = 0, cnt = 0;
for (int i = 0, j = 0; i < 32; ++i) {
cnt += num >> i & 1 ^ 1;
while (cnt > 1) {
cnt -= num >> j & 1 ^ 1;
++j;
}
ans = max(ans, i - j + 1);
}
return ans;
}
};func reverseBits(num int) (ans int) {
var cnt, j int
for i := 0; i < 32; i++ {
cnt += num>>i&1 ^ 1
for cnt > 1 {
cnt -= num>>j&1 ^ 1
j++
}
ans = max(ans, i-j+1)
}
return
}function reverseBits(num: number): number {
let ans = 0;
let cnt = 0;
for (let i = 0, j = 0; i < 32; ++i) {
cnt += ((num >> i) & 1) ^ 1;
for (; cnt > 1; ++j) {
cnt -= ((num >> j) & 1) ^ 1;
}
ans = Math.max(ans, i - j + 1);
}
return ans;
}class Solution {
func reverseBits(_ num: Int) -> Int {
var ans = 0
var countZeros = 0
var j = 0
for i in 0..<32 {
countZeros += (num >> i & 1 ^ 1)
while countZeros > 1 {
countZeros -= (num >> j & 1 ^ 1)
j += 1
}
ans = max(ans, i - j + 1)
}
return ans
}
}