题目描述
解题思路
本题的目的是返回不重复数组的长度,并且代码能够展示出原来的数组长度不变,前n个数是不重复的数,后几个数与原数组对应的位置数值保持一致
解法一:双指针法
对排序后的列表,首先放置两个相邻的指针 i i i 和 j j j ,其中 i i i 是慢指针, j j j 是快指针:
- 如果nums[i] == nums[j],则让 j j j 跳过重复项
- 如果nums[i] != nums[j],则nums[j]的值赋值给nums[i+1],再递增 i i i 和 j j j,直到列表的末尾,返回不重复数组的长度
python代码
class Solution:
def removeDuplicates(self, nums):
if not nums: return 0
i = 0
for j in range(1, len(nums)):
if nums[i] != nums[j]:
i += 1
nums[i] = nums[j]
return i + 1
s = Solution()
print(s.removeDuplicates([1,1,2]))