Codility每週一課 P7 2 Fish

2021-09-11 01:44:53 字數 1937 閱讀 9888

a和b均是由n個整數組成的兩個非空陣列,均表示n個在河流中覓食的魚。魚的編號從0到n-1,最開始每條魚都有乙個特定的位置。如果p和q是兩條魚,並且p陣列a表示魚的大小,它的所有值都是唯一的。陣列b表示魚游的方向,它只包含0和1,其中:

0表示向上游的魚;2. 1表示向下游的魚;

如果兩條魚向相反的方向游動,並且它們之間沒有其他(活的)魚,它們最終會相遇。那麼只有一條魚可以存活,因為較大的魚會吃掉較小的魚。更準確地說,當p如果a[p]>a[q],則p吃q,p仍將向下游動;如果a[q]>a[p],則q吃p,q仍將向上游動;

假設所有的魚都以相同的速度游動。也就是說,朝同一方向游動的魚永遠不會相遇。目標是計算將存活的魚的數量。

例如,陣列a和b,其中:

a[0]=4,a[1]=3,a[2]=2,a[3]=1,a[4]=5

b[0]=0,b[1]=1,b[2]=0,b[3]=0,b[4]=0

一開始,所有的魚都是活的。除1號魚外,所有的魚都向上游移動。1號魚遇到2號魚並吃了它(a[1]>a[2]),然後它遇到3號魚也吃了它(a[1]>a[3])。最後,它遇到4號魚並被它吃掉(a[1]編寫函式:

def

solution

(a, b)

給定兩個由n個整數組成的非空陣列a和b,則返回活魚的數。

例如,給定上面所示的陣列,函式應該返回2。

假定:n是區間[1,100000]內的整數;

陣列a的每個元素都是區間[0…100000000]中的整數;

陣列b的每個元素為0或者1;

陣列a的元素都是不同的;

類似於括號匹配。從頭開始遍歷陣列b,如果元素為0,並且儲存向下游的魚的列表為空,則此魚肯定是活魚。如果列表不為空,就進行吃魚的判斷。如果把列表中的魚全部吃掉,則活魚加1。如果元素為1,則新增到列表中。最後的活魚數再加上列表的長度即可。

# -*- coding:utf-8 -*-

# &author anfany

# lesson 7:stacks and queues

# p 7.2 fish

defsolution

(a, b)

:"""

相遇的魚大魚吃小魚

:param a: a表示魚的大小

:param b: 表示魚游的方向

:return: 活魚的數目

"""alive_fish =

0 fish_down =

# 儲存向下游的魚

for index, value in

enumerate

(b):

if value ==0:

iflen

(fish_down)==0

: alive_fish +=

1else

:# 開始判斷吃魚

try:

while fish_down[-1

]< a[index]

: fish_down.pop(-1

)except indexerror:

alive_fish +=

1else:)

return alive_fish +

len(fish_down)

每週一激勵話語

你若被富人影響,就會有賺錢的慾望 你若被窮人影響,就會有安定的滿足 你若被勵志的人影響,就會有上進的動力 你若被懶惰的人影響,就會有頹廢的退縮 你若被積極的人影響,就會有生活的激情 你若被消極的人影響,就會有失望的沉淪!所以,你一定要靠近那些充滿正能量的人,遠離那些充滿負能量的人,因為正能量能夠給你...

每週一總結(1)

實習第一周。來到公司 第一件事就是 裝各種軟體。好在以前裝了myeclpise8.5 並且tomcat 也配置好了。只是 那會裝svn怎麼也弄不上。雖然從網上搜過很多方法 還是不行。這次 終於 把8.5的svn給裝上了。方法如下 下下來的那個site 1.6.5 然後用底下的features plu...

每週一總結(2)

這一周 沒有再明顯的讓我讀文件。而是 讓我做一些 零零散散的小東西。比如 加個什麼授權的小功能,然後做些測試,並且記錄下來。反正每天至少都有讓你做得事了,不再是像上一周剛來那樣處於自由狀態。雖然這一周做得事不多,也沒幹什麼驚天地泣鬼神的事。但是 還是自己寫的一點點 終於在嚴格的審查修改再審查再修改之...