1 回答
TA貢獻1872條經驗 獲得超4個贊
瀏覽列表會更快,將每個值與前一個值進行比較,以確保它嚴格增加。對于列表中的一個數字,允許此錯誤,并跳過此數字。不幸的是,這并不是那么簡單,正如我們在下面看到的那樣:
不起作用(例如。[1,4,2,3])
def almostIncreasingSequence(sequence):
lastValue = sequence[0]
removed_value = False
for i in range(1,len(sequence)):
if sequence[i] <= lastValue:
if removed_value:
return False
else:
removed_value = True
else:
lastValue = sequence[i]
return True
相反,如果我們遇到非增加,我們需要涵蓋兩種可能性:刪除當前數字(例如。[1,2,1,3])或刪除前一個(例如。[1,2,8,4])。我們還有一些邊緣情況用于刪除列表中的第一個或最后一個數字。
最終(不那么漂亮)的解決方案
def almostIncreasingSequence(sequence):
lastValue = sequence[0]
skipped_value = False
for i in range(1,len(sequence)):
if sequence[i] <= lastValue:
if i+1 == len(sequence):
return not skipped_value # last number is not decreasing, skip if we can
if skipped_value:
# if we've already skipped a number - won't work
return False
elif sequence[i+1] > sequence[i-1]:
# skipping the current number will fix it
skipped_value = True
lastValue = sequence[i-1]
else:
# try and skip the previous number
skipped_value = True
if i == 1 or sequence[i] > sequence[i-2]:
# can skip the previous number and it'll work
lastValue = sequence[i]
else:
# we have no chance
return False
else:
lastValue = sequence[i]
return True
添加回答
舉報
