天天看點

頭腦風暴:翻轉數位

題目

給定一個32位整數 num,你可以将一個數位從0變為1。請編寫一個程式,找出你能夠獲得的最長的一串1的長度。

示例1:

輸入: num = 1775(11011101111)
輸出: 8      

示例2:

輸入: num = 7(0111)
輸出: 4      

解題思路

根據題目給出的示例分析,我們可以通過右移去判斷每一位是否為 "1",進而去計算最長一串 1 的長度;

通過每次去維護三個變量:

cur:目前位置為止連續 1 的個數,遇到0 歸零,遇到 1 加 1;

insert:在目前位置變成 1,往前數連續 1 的最大個數,遇到 0 變為 cur+1,遇到 1 加 1;

res:儲存insert的最大值即可;

代碼實作

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): 隻使用了幾個變量

我是傑少,如果您覺的我寫的不錯,那請給我 點贊+評論+收藏 後再走哦!

  1. 閱讀完記得給我點個贊哦,有👍 有動力
  2. 關注公衆号---HelloWorld傑少,第一時間推送新姿勢