Leetcode 1375. Bulb Switcher III (python+cpp)

努利!奮鬥!發表於2020-12-27

題目

在這裡插入圖片描述

解法:

這道題目想清楚了關鍵就非常的簡單。當一個燈被點亮時,這個燈變數的條件是,他的左邊的所有燈都是亮的。意味著從這個等開始到1的燈都必須全部點亮,換句話說,他左邊包括他自己一共被點亮的燈數必須等於他的編號。而要滿足所有的燈都是藍色,顯然由最右邊的點亮的等來決定,只要最右邊此時被點亮的燈滿足變藍條件,那麼自然所有的燈都是藍色的,所以只需要簡單操作如下:

  • 儲存並更新此刻及之前所有狀態中被點亮燈的最右邊那盞
  • 每一次判斷最右邊那盞是否符合變藍的條件
class Solution:
    def numTimesAllBlue(self, light: List[int]) -> int:
        max_bulb_ind = 0
        count = 0
        turnedon_bulb = 0
        
        for bulb in light:
            max_bulb_ind = max(max_bulb_ind,bulb)
            turnedon_bulb += 1
            if turnedon_bulb == max_bulb_ind:
                count += 1
        
        return count

C++版本

class Solution {
public:
    int numTimesAllBlue(vector<int>& light) {
        int count = 0;
        int max_bulb_ind = 0;
        int turnedon_bulbs = 0;
        for(int i=0;i<light.size();i++){
            max_bulb_ind = max(max_bulb_ind,light[i]);
            turnedon_bulbs++;
            if(max_bulb_ind == turnedon_bulbs) count++;
        }
        return count;
    }
    
};

相關文章