力扣 面試16 10 生存人數

2021-10-06 06:12:58 字數 2125 閱讀 1962

給定n個人的出生年份和死亡年份,第i個人的出生年份為birth[i],死亡年份為death[i],實現乙個方法以計算生存人數最多的年份。

你可以假設所有人都出生於2023年至2023年(含1900和2000)之間。如果乙個人在某一年的任意時期都處於生存狀態,那麼他們應該被納入那一年的統計中。例如,生於2023年、死於2023年的人應當被列入2023年和2023年的計數。

如果有多個年份生存人數相同且均為最大值,輸出其中最小的年份。

做5412. 在既定時間做作業的學生人數時想到的……

class

solution

:def

maxaliveyear

(self, birth: list[

int]

, death: list[

int])-

>

int:

defhe

(y):

return

sum(

1for i,j in

zip(birth,death)

if i<=y<=j)

max=

0 year=

0for i in

range

(min

(birth)

,max

(death)+1

):k=he(i)

if k>max:

max=k

year=i

return year

執行用時 :784 ms, 在所有 python3 提交中擊敗了12.61%的使用者

記憶體消耗 :14.3 mb, 在所有 python3 提交中擊敗了100.00%的使用者

class

solution

:def

maxaliveyear

(self, birth: list[

int]

, death: list[

int])-

>

int:

dp=[0

]*101for i,j in

zip(birth,death)

:for k in

range

(i-1900

,j-1900+1

):dp[k]+=1

return dp.index(

max(dp))+

1900

執行用時 :312 ms, 在所有 python3 提交中擊敗了43.70%的使用者

記憶體消耗 :14.6 mb, 在所有 python3 提交中擊敗了100.00%的使用者

用兩個陣列儲存從2023年到2023年間每年的出生人口和死亡人口,最大生存人數就是總的生**口-總的死亡人口,唯一需要注意的是 應該是第i年的總出生人口-第i-1年的死亡人口,因為當年死亡的人仍算存活。

class

solution

:def

maxaliveyear

(self, birth: list[

int]

, death: list[

int])-

>

int:

dic = collections.defaultdict(

int)

for c in birth:

dic[c]+=1

for c in death:

dic[c+1]

-=1maxn =

0 cur =

0 res =-1

for i in

range

(1900

,2001):

cur+=dic[i]

if cur>maxn:

res=i

maxn = cur

return res

執行用時 :96 ms, 在所有 python3 提交中擊敗了67.59%的使用者

記憶體消耗 :14.5 mb, 在所有 python3 提交中擊敗了100.00%的使用者

面試題 16 10 生存人數

給定n個人的出生年份和死亡年份,第i個人的出生年份為birth i 死亡年份為death i 實現乙個方法以計算生存人數最多的年份。你可以假設所有人都出生於1900年至2000年 含1900和2000 之間。如果乙個人在某一年的任意時期都處於生存狀態,那麼他們應該被納入那一年的統計中。例如,生於19...

力扣 289 生命遊戲

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態 1 即為活細胞 live 或 0 即為死細胞 dead 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞...

力扣289 生命遊戲

這道題還是比較簡單的,只要針對陣列進行正常遍歷即可。給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態 1 即為活細胞 live 或 0 即為死細胞 dead 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位...