这道题我看了解答感觉不是很对,因为并没有实现原地对数组进行修改。但还是记录一下,这种解题方法还是很值得学习的。
题目如下:
解答的方法如下:
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的解答方法是错误的