这道题我看了解答感觉不是很对,因为并没有实现原地对数组进行修改。但还是记录一下,这种解题方法还是很值得学习的。
题目如下:
解答的方法如下:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
#原地移除元素之后,再返回当前的length
n = len(nums)
left = 0 # 左指针从0开始,指向下一个将要赋值的位置
# 右指针从0开始,指向当前将要处理的元素
for right in range(0, n):
# 右指针指向的元素不等于val,是输出数组的元素
# 将右指针指向的元素复制到左指针位置,然后将左右指针同时右移
if nums[right] != val:
nums[left] = nums[right]
left += 1
# 右指针指向的元素等于val,不在输出数组里,左指针不动,右指针右移一位
print(nums)
return left
我们可以看到这个解答方法,整个数组的长度并不会发生变化,没有做到原地修改。我怀疑这个python的解答方法是错误的