LeetCode 5353. 灯泡开关 III

两盒软妹~` 提交于 2020-03-08 18:45:00

5353. 灯泡开关 III

房间中有 n 枚灯泡,编号从 1 到 n,自左向右排成一排。最初,所有的灯都是关着的。

在 k  时刻( k 的取值范围是 0 到 n - 1),我们打开 light[k] 这个灯。

灯的颜色要想 变成蓝色 就必须同时满足下面两个条件:

灯处于打开状态。
排在它之前(左侧)的所有灯也都处于打开状态。
请返回能够让 所有开着的 灯都 变成蓝色 的时刻 数目 。

思路:直接找最大值m和light[i]的关系即可,竞赛的时候居然把过程模拟出来了

大神代码

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

VS我的代码(模拟过程)

class Solution {
public:
    int numTimesAllBlue(vector<int>& light) {
        int len = light.size();
        int res=0;
        int dp[len+5];
        fill(dp, dp+len+1, 0);//初始化全为0,关闭状态
        dp[0]=2;//第0栈为蓝色
        int next_light;
        for(int i=0;i<len;i++){
            dp[light[i]]=1;//打开light[i]的灯
            if(dp[light[i]-1]==2){//它前一盏灯是蓝色
                dp[light[i]]=2;
                //把后面连续开着的灯变蓝
                next_light=light[i]+1;
                while(dp[next_light]==1){
                    dp[next_light]=2;
                    next_light++;
                }
                if(next_light==i+2) res++;
            }
            
        }
        return res;
    }
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!