題目
給定一個32位整數 num,你可以将一個數位從0變為1。請編寫一個程式,找出你能夠獲得的最長的一串1的長度。
示例1:
輸入: num = 1775(11011101111)
輸出: 8
示例2:
輸入: num = 7(0111)
輸出: 4
解題思路
根據題目給出的示例分析,我們可以通過右移去判斷每一位是否為 "1",進而去計算最長一串 1 的長度;
通過每次去維護三個變量:
cur:目前位置為止連續 1 的個數,遇到0 歸零,遇到 1 加 1;
代碼實作
class Solution {
public int reverseBits(int {
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
最後
- 時間複雜度 O(32): 隻需要周遊一遍每一位即可
- 空間複雜度 O(1): 隻使用了幾個變量