题目描述
解题思路
使用双指针进行解题。i=0为头指针,j=len(nums)-1为尾指针。当nums[i]等于val的时候,需要删除这个元素,那么就把nums[i]与nums[j]进行交换,然后使得j=j-1,以删除这个元素,而由于交换后的nums[i]有可能等于val,因此还需要对nums[i]进行检查,也就是说此时i不动。如果nums[i]不等于val,则使i向前移动一步即可。当j<i时结束循环。最后返回i。
复杂度分析:
由于只需要i和j一起遍历完数组,因此时间复杂度为o(n)
由于只需要创建常数个遍历,因此空间复杂度为o(1)
python代码
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
if not nums:return 0
i = 0
j = len(nums) - 1
while j >= i:
if nums[i] == val:
tmp = nums[i]
nums[i] = nums[j]
nums[j] = tmp
j -= 1
else:
i += 1
return i