leetcode1375燈泡開關三

2021-10-06 22:17:24 字數 1938 閱讀 9452

傻兮兮地每個都判斷一次

class

solution

(object):

defnumtimesallblue

(self, light)

:"""

:type light: list[int]

:rtype: int

"""# 就是判斷某個時刻k,light[0:k+1]是否包含了[1:k+1]

count=

0for i in

range

(len

(light)):

flag=

0for j in

range

(i+1):

if j+

1not

in light[

0:i+1]

: flag=

1break

if flag==0:

count+=

1return count

結果超出了時間限制,看到別人的題解直接判斷最大值有沒有包含進去,覺得自己智商真的不高

class

solution

(object):

defnumtimesallblue

(self, light)

:"""

:type light: list[int]

:rtype: int

"""# 就是判斷某個時刻k,light[0:k+1]的最大值是否是k+1

count=

0for i in

range

(len

(light)):

lightmax=i+

1if lightmax==

max(light[

0:i+1]

):count+=

1return count

又是超出了時間限制,沒必要每次都判斷light[0:i+1],維護乙個當前的最大值

class

solution

(object):

defnumtimesallblue

(self, light)

:"""

:type light: list[int]

:rtype: int

"""# 就是判斷某個時刻k,light[0:k+1]的最大值是否是k+1

count=

0 lightmax=

0for i in

range

(len

(light)):

lightmax=

max(lightmax,light[i]

)if lightmax==i+1:

count+=

1return count

有的大佬想到如果恰好全部亮起,那麼燈泡的編號之和恰好是1+2+…+k,這個時候要用long來存

class

solution

(object):

defnumtimesallblue

(self, light)

:"""

:type light: list[int]

:rtype: int

"""# 就是判斷某個時刻k,light[0:k+1]的最大值是否是k+1

count=

0sum=0

for i in

range

(len

(light)):

sum=

sum+light[i]

ifsum

==(i+1)

*(i+2)

/2: count+=

1return count

1375 燈泡開關 III(分析)

1.問題描述 房間中有 n 枚燈泡,編號從 1 到 n,自左向右排成一排。最初,所有的燈都是關著的。在 k 時刻 k 的取值範圍是 0 到 n 1 我們開啟 light k 這個燈。燈的顏色要想 變成藍色 就必須同時滿足下面兩個條件 燈處於開啟狀態。排在它之前 左側 的所有燈也都處於開啟狀態。請返回...

Leetcode 319 燈泡開關

初始時有 n 個燈泡關閉。第 1 輪,你開啟所有的燈泡。第 2 輪,每兩個燈泡你關閉一次。第 3 輪,每三個燈泡切換一次開關 如果關閉則開啟,如果開啟則關閉 第 i 輪,每 i 個燈泡切換一次開關。對於第 n 輪,你只切換最後乙個燈泡的開關。找出 n 輪後有多少個亮著的燈泡。示例 輸入 3輸出 1解...

LeetCode(319 燈泡開關)

如題 最直觀的做法就是模擬每次開關操作,用乙個int陣列儲存狀態,每次去判斷對應的位置更改對應index的值,但是很顯然這是指數即的計算。那麼換個方向,我們就以每個位置會進行開合的次數來判斷,很顯然開合奇數次則為開啟,否則為關閉。那麼開合次數是由上面決定的,間隔n不就是對應整除n麼,那麼對應的就是再...