問題是:
間諜游戲:撰寫一個函式,接收整數串列,如果它按順序包含 007,則回傳 True
def spy_game(nums):
for x in range(0,len(nums)):
if nums[x]==0:
for y in range(x,len(nums)):
if nums[y]==0:
for z in range(y,len(nums)):
if nums[z]==7:
return True
return False
但給出的解決方案是:
def spy_game(nums):
code = [0,0,7,'x']
for num in nums:
if num == code[0]:
code.pop(0) # code.remove(num) also works
return len(code) == 1
有人可以解釋一下解決方案嗎?我的代碼還可以嗎?
uj5u.com熱心網友回復:
您的解決方案很差,因為它只允許特定的 3 位數序列 - 即 0,0,7。想象一下,如果更改順序,您將要做些什么。
提供的解決方案已損壞。例如,如果輸入是 [0, 2, 3, 0, 7, 1],它將回傳 True。
這是真正有效的東西:
def spy_game(nums):
code = [0, 0, 7]
for i in range(len(nums)-len(code)):
if nums[i:i len(code)] == code:
return True
return False
uj5u.com熱心網友回復:
不同的實作本身并沒有錯。兩種演算法都在 O(n) 中遍歷串列。
但是,如果代碼中包含術語“07”,您的代碼也可以作業,因為它會查看索引 x 兩次:一次在第一個回圈中,一次在第二個回圈開始時。改為使用y in range(x 1, len(nums))。
給定的解決方案使用串列僅包含整數的事實,因此如果遇到“007”,串列中仍然會有一個“x”。我覺得有點奇怪,因為我看不到有一個串列 [0, 0, 7] 并len(code) == 0在之后檢查code.pop(0)不起作用的用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/413836.html
標籤:
