当前位置: 首页 > 后端技术 > Python

力扣-1375.BulbSwitcherIII灯泡开关III【Python】

时间:2023-03-26 11:15:07 Python

LeetCode1375.BulbSwitcherIII灯泡开关III【Medium】【Python】【最大编号】问题LeetCode有一个房间有n个灯泡,编号从1到n,排列成一个从左到右排。最初,所有灯泡都关闭。在时刻k(k从0到n-1),我们打开light[k]灯泡。一个灯泡只有在它打开并且所有先前的灯泡(左侧)也打开时才会将颜色变为蓝色。返回所有打开的灯泡为蓝色的时刻数。示例1:输入:light=[2,1,3,5,4]输出:3解释:所有灯泡打开,在时刻1、2和4都是蓝色的。示例2:输入:light=[3,2,4,1,5]输出:2解释:Allbulbsturnedon,areblueatmoment3,and4(index-0).Example3:Input:light=[4,1,2,3]Output:1Explanation:Allbulbsturned,areblueatmoment示例3:输入:light=[4,1,2,3]输出:1解释:所有灯泡都打开,此刻是蓝色3(index-0).Bulb4th此刻变为蓝色3.Example4:Input:light=[2,1,4,3,6,5]Output:3Example5:Input:light=[1,2,3,4,5,6]Output:6Constraints:n==light.length1<=n<=5*10^4lightisapermutationof[1,2,...,n]问题出在房间里有n个灯泡,编号从1到n,从左到右排成一排。最初,所有的灯都熄灭了。在时间k(k的范围从0到n-1),我们打开灯light[k]。要使灯的颜色变为蓝色,必须同时满足以下两个条件:灯亮。其前一排(左侧)的所有灯也都亮着。请返回所有亮着的灯都变成蓝色的时刻数。示例1:输入:light=[2,1,3,5,4]输出:3解释:所有亮起的灯都变成蓝色的时刻分别为1、2和4。示例2:输入:light=[3,2,4,1,5]输出:2解释:所有亮起的灯都是蓝色的时刻是3和4(索引0)。示例3:输入:light=[4,1,2,3]输出:1解释:所有亮起的灯都变成蓝色的时刻为3(索引为0)。第4个灯在时间3变为蓝色。示例4:输入:light=[2,1,4,3,6,5]输出:3示例5:输入:light=[1,2,3,4,5,6]输出:6提示:n==light.length1<=n<=5*10^4light是[1,2,...,n]的排列。思路是遍历最大次数,修改当前状态为开灯,比较开灯次数是否等于记录的最大次数。如果相等,灯可以变成蓝色,所以计数+1。时间复杂度:O(n)空间复杂度:O(1)Python3代码类解决方案:defnumTimesAllBlue(self,light:List[int])->int:n=len(light)flag=[False]*(n+1)cnt_blue,cnt_light=0,0max_i=0foriinrange(n):flag[light[i]]=True#打开灯泡打开灯cnt_light+=1max_i=max(max_i,light[i])#开灯数=当前最大记录数:灯变蓝数+1ifcnt_light==max_i:cnt_blue+=1returncnt_blue代码地址GitHub链接