-
Notifications
You must be signed in to change notification settings - Fork 43
/
bulb-switcher-iii.py
131 lines (109 loc) · 3.27 KB
/
bulb-switcher-iii.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
"""
LeetCode 1375. 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]
"""
# V0
# IDEA:
# https://iter01.com/575553.html
# if bulb on idx = k can be changed to blue
# -> ALL of bulb on the left (idx=k) SHOULD also on
# -> idx=0 ~ k-1 bulb are ALL on
# so, we can maintain 2 var: max_open, cur_open
# max_open get current open bulb with MAX index
# cur_open records how many bulb are on currently
# and if max_open == cur_open on idx=k
# -> means all bulb on left are on, so current bulb (idx=k) can become blue
class Solution:
def numTimesAllBlue(self, light):
# edge case
if not light:
return
res = 0
max_open = 0
cur_open = 0
for i in range(len(light)):
max_open = max(max_open, light[i])
cur_open += 1
if max_open == cur_open:
res += 1
return res
# V0'
class Solution:
def numTimesAllBlue(self, light):
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
# V1
# https://iter01.com/575553.html
class Solution:
def numTimesAllBlue(self, light):
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
# V1''
# https://www.codeleading.com/article/31473623024/
class Solution:
def numTimesAllBlue(self, light):
ans=0
sub_max=-1
for k in range(len(light)):
sub_max=max(sub_max,light[k])
if sub_max==k+1:
ans=ans+1
return ans
# V1'''
# https://blog.csdn.net/Wonz5130/article/details/104734212
# https://blog.csdn.net/qq_37821701/article/details/111772365
# V1''''
# https://zxi.mytechroad.com/blog/algorithms/array/leetcode-1375-bulb-switcher-iii/
# C++
# class Solution {
# public:
# int numTimesAllBlue(vector<int>& light) {
# int ans = 0;
# int right = 0;
# for (int i = 0; i < light.size(); ++i) {
# right = max(right, light[i]);
# ans += right == i + 1;
# }
# return ans;
# }
# };
# V2