我正在解決一個(gè)需要以下輸入的問題:[1, 0, 2, 3, 0, 4, 5, 0]并輸出這個(gè):[1, 0, 0, 2, 3, 0, 0, 4]我的函數(shù)檢測零,當(dāng)零是列表的第 i 個(gè)元素時(shí),它i+1也變成零,并且列表的其余部分被移動(dòng)以為其騰出空間。列表末尾的元素被推出以騰出空間。我能夠用兩個(gè)for循環(huán)來完成它,但是它有O(n^2),我想在 中完成它O(n)。我想出了這個(gè):new = [0] * len(arr)zeroes = 0d = 0我創(chuàng)建第二個(gè)零列表,zeroes對零列表進(jìn)行計(jì)數(shù),并且d是要復(fù)制第二個(gè)列表的索引。我使用的數(shù)組是函數(shù)的輸入,名為arr.首先我數(shù)零:for i in range(len(arr)): if arr[i] == 0: zeroes+=1 然后我復(fù)制。我通過索引檢查該值是否為零,如果是,則跳過第 d 個(gè)和第 d+1 個(gè)元素。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]我不確定為什么最后一個(gè)元素沒有改變。
通過移動(dòng)字母來復(fù)制數(shù)組中的零以騰出空間
繁華開滿天機(jī)
2023-11-09 22:28:06