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