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即为修改后最后一个非重复元素出现的位置

 

posted @ 2020-03-06 22:23  eltShawn  阅读(117)  评论(0)    收藏  举报