Ich versuche, ein Programm für ein bestimmtes Array und einen Wert zu schreiben, alle Instanzen dieses Werts an Ort und Stelle zu entfernen und die neue Länge zurückzugeben.Python-Array-Slice funktioniert nicht wie erwartet
Beispiel: gegebener Eingang Array nums = [3,2,2,3], val = 3
Es sollte zurückkehren Länge = 2 ist, mit den ersten beiden Elementen nums wobei 2.
hier ist mein Code:
Code 1:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
return len(nums[i:])
Dies gibt den Array-Slice in umgekehrter Reihenfolge.
Input:
[3,2,2,3]
3
Output: [3,3]
Expected: [2,2]
Allerdings, wenn ich am Ende des Codes 1 geringfügige Änderungen vornehmen, gibt es mir die korrekte Ausgabe:
nums[:] = nums[i:]
return len(nums[i:])
Code 2:
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
i = 0
j = len(nums) - 1
while i <= j:
while i <= j and nums[j] != val:
j -= 1
while i <= j and nums[i] == val:
i += 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
nums[:] = nums[i:]
return len(nums)
Ich kippe finde heraus, warum mein Code 1 nicht funktioniert. Könnte jemand mir helfen zu verstehen, warum Slice nicht wie erwartet funktioniert?
Ich glaube nicht, dass beide Ansätze funktionieren, es sei denn, Sie haben eine Einschränkung für die Eingabe, die Sie nicht erwähnt haben. –
Die seltsame Sache ist, dass ich Ihren Code1 lief und es wie erwartet funktioniert, d. H. Mit Eingabe [3,2,2,3] gibt [2,2] und Länge 2 zurück – Nurjan