亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過移動字母來復制數組中的零以騰出空間

通過移動字母來復制數組中的零以騰出空間

繁華開滿天機 2023-11-09 22:28:06
我正在解決一個需要以下輸入的問題:[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]


查看完整回答
反對 回復 2023-11-09
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號