我正在解決一個需要以下輸入的問題:[1, 0, 2, 3, 0, 4, 5, 0]并輸出這個:[1, 0, 0, 2, 3, 0, 0, 4]我的函數檢測零,當零是列表的第 i 個元素時,它i+1也變成零,并且列表的其余部分被移動以為其騰出空間。列表末尾的元素被推出以騰出空間。我能夠用兩個for循環來完成它,但是它有O(n^2),我想在 中完成它O(n)。我想出了這個:new = [0] * len(arr)zeroes = 0d = 0我創建第二個零列表,zeroes對零列表進行計數,并且d是要復制第二個列表的索引。我使用的數組是函數的輸入,名為arr.首先我數零:for i in range(len(arr)): if arr[i] == 0: zeroes+=1 然后我復制。我通過索引檢查該值是否為零,如果是,則跳過第 d 個和第 d+1 個元素。for i in range(len(arr)-zeroes): if arr[i] == 0: d+=1 else: new[d] = arr[i] d+=1然而對于:[1, 0, 2, 3, 0, 4, 5, 0]輸出是:[1, 0, 0, 2, 3, 0, 0, 0]我不確定為什么最后一個元素沒有改變。
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
這是一個更簡單的解決方案,仍然是 O(n):
a = [1,0,2,3,0,4,5,0]
b = []
for i in a:
b.append(i)
if i == 0:
b.append(0)
b = b[:len(a)]
b 的值是
[1, 0, 0, 2, 3, 0, 0, 4]
添加回答
舉報
0/150
提交
取消