题目:数组中的重复元素都删掉,且返回长度
要求:不可另外开空间
解题思路:用两个指针,一个指开头,一个指结尾,当开头的与所给值相同时把结尾的值赋值过来,尾指针向前
特点:这样至少求出了长度,但原来的顺序已变了
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
start, end = 0, len(nums) - 1
while start <= end:
if nums[start] == val:
nums[start], end = nums[end], end - 1
else:
start +=1
return start
/****顺序类型不变**、
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
start, end = 0, len(nums)
f=0
while start < end:
if nums[start] != val:
nums[f]=nums[start]
f+=1
start+=1
return f
有顺序的两个指针;
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
start, end = 0, len(nums)-1
f=0
while start <=end:
if nums[start] == val:
start+=1
elif nums[end]==val:
end-=1
else:
nums[f]=nums[start]
f+=1
start+=1
return f