Ich erhalte eine Liste und eine Zahl als Eingabeparameter für eine Methode:
def removeElement(nums: list[int], val: int):
Ich versuche, alle Elemente von zu durchlaufen nums
und alle zu entfernen, wenn sie gleich sind.
def removeElement(nums: list[int], val: int):
for i in nums:
if i == val:
nums.remove(i)
print(nums)
return nums
Wenn ich ein array: übergebe [0, 1, 2, 2, 3, 0, 4, 2]
und val: eingebe 2
, habe ich immer noch die letzte Nummer 2
der Liste in der Ausgabe. Ausgang:[0, 1, 3, 0, 4, 2]
Hinweis: Ich sollte keine zusätzliche Liste oder eine andere Sammlung für die Raumkomplexität verwenden. Kann mir jemand sagen, was ich hier für einen Fehler mache und wie ich ihn korrigieren kann?
Lösung des Problems
Das Problem ist, dass beim Ausführen von for i in nums:
, dem ersten Element von, dann dem 2. usw. i
zugewiesen wird, selbst wenn einige Elemente entfernt werden, was in Ihrem Fall bedeutet, dass es nach dem Entfernen der ersten 2 an der 3. Position an die 4. Position verschoben wird, die jetzt eine 3 ist, also es überspringt die ursprünglich 4. 2.nums
Um dies zu beheben, können Sie die Anzahl der Vorkommen von zählen val
und sie anschließend entsprechend entfernen:
def removeElement(nums: list[int], val: int):
cnt = 0
for i in nums:
if i == val:
cnt += 1
for _ in range(cnt):
nums.remove(val)
print(nums)
return nums
Keine Kommentare:
Kommentar veröffentlichen