1375. Bulb Switcher III

https://leetcode.com/problems/bulb-switcher-iii/

There is a room with n bulbs, numbered from 1 to n, arranged in a row from left to right. Initially, all the bulbs are turned off.

At moment k (for k from 0 to n - 1), we turn on the light[k] bulb. A bulb change color to blue only if it is on and all the previous bulbs (to the left) are turned on too.

Return the number of moments in which all turned on bulbs are blue.

Example 1:

Input: light = [2,1,3,5,4]
Output: 3
Explanation: All bulbs turned on, are blue at the moment 1, 2 and 4.

Example 2:

Input: light = [3,2,4,1,5]
Output: 2
Explanation: All bulbs turned on, are blue at the moment 3, and 4 (index-0).

Example 3:

Input: light = [4,1,2,3]
Output: 1
Explanation: All bulbs turned on, are blue at the moment 3 (index-0).
Bulb 4th changes to blue at the moment 3.

Example 4:

Input: light = [2,1,4,3,6,5]
Output: 3

Example 5:

Input: light = [1,2,3,4,5,6]
Output: 6

Constraints:

  • n == light.length

  • 1 <= n <= 5 * 10^4

  • light is a permutation of [1, 2, ..., n]

n个灯泡,编号[1, n],初始都是灭的;从[0, n-1]时刻每次根据light数组点亮一个新灯泡;当灯泡左边的所有灯泡都是亮的,那它会变蓝;问有几个时刻会让所有亮着的灯泡都变蓝。由于变蓝需要当前和所有左边的灯泡都是亮的且每次都会点亮一个新灯泡,全变蓝只能是第i时刻后前面i+1个灯泡都点亮了,因此用r记录被点亮的灯泡中最右的编号,当r == i + 1时意味着前面i+1个灯泡都点亮了。

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

Last updated