Leetcode--删除排序数组中的重复项(26)
题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间.
(1)思路一 :利用python中的count函数和remove函数。其中count(obj)用来计算obj在列表中出现的次数,remove(obj)用来移除列表中的obj
1 class Solution: 2 def removeDuplicates(self, nums: List[int]) -> int: 3 i = 0 4 while i < len(nums)-1: 5 temp = nums[i] 6 if nums.count(temp) != 1: 7 nums.remove(temp) 8 else: 9 i += 1 10 return len(nums)
此方法代码比较简洁,但运行时间实在是有点久╮(╯-╰)╭
后来直接把count函数和remove函数用别的方式写出来就稍微快一点。
(2)思路二: 使用双指针,分为一个快指针j(从位置1开始)和一个慢指针i(从位置0开始)。只要nums[j] == nums[i] 就移动快指针跳过重复项;当nums[j] != nums[i]时,移动慢指针,并nums[j]复制到nums[i+1]。直至快指针遍历完整个列表。(这个双指针算法实在是太优美了(●ˇ∀ˇ●)学习上!)
1 class Solution: 2 def removeDuplicates(self, nums: List[int]) -> int: 3 i = 0 #慢指针 4 j = 1 #快指针 5 length = len(nums) 6 while j < length: 7 if nums[i] != nums[j]: 8 i += 1 9 nums[i] = nums[j] 10 j += 1 11 return i+1 #i即为修改后最后一个非重复元素出现的位置