1 Description(描述)
Given an array nums and a value val, remove all instances of that value in-place and return the new length.
给定一个数组数字和一个值val,删除该值的所有实例并返回新的长度。
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
不要为另一个数组分配额外的空间,只能通过修改输入数组并且空间复杂度为O(1)。
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
元素的顺序可以改变。在新的长度之外留下什么并不重要。
Example 1:
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
函数应该返回length = 2,数字的前两个元素是2。
It doesn’t matter what you leave beyond the returned length.
在返回的长度之外留下什么并不重要。
Example 2:
Given nums = [0,1,2,2,3,0,4,2], val = 2,
Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
函数应该返回length = 5,数字的前5个元素包含0、1、3、0和4。
Note that the order of those five elements can be arbitrary.
注意,这五个元素的顺序可以是任意的。
It doesn’t matter what values are set beyond the returned length.
在返回的长度之外设置什么值并不重要。
2 Solution(解决方案)
方案一:遍历列表比较每一个元素相同则删除。
def removeElement(nums, val) :
i = 0
while i < len(nums):
if nums[i] == val:
nums.pop(i)
else:
i += 1
return len(nums)
方案二:双指针,一个指针负责遍历数组,另一个负责指示新数组元素的位置,两个指针所指元素相同则不考虑,不同就交换,指针增加一,最后返回指针。
def removeElement(nums, val) :
i = 0
for j in range(len(nums)):
if nums[j] == val:
continue
else:
nums[i] = nums[j]
i += 1
return i