📅  最后修改于: 2023-12-03 15:07:15.341000             🧑  作者: Mango
在开发过程中,我们经常需要操作数组。但是,数组中会存在重复元素。为了提高程序的效率,我们需要删除数组中的重复项。本文将介绍两种常用的方法,分别是遍历删除和双指针删除。
遍历删除的思路比较简单:依次遍历数组中的元素,如果发现有重复元素,就删除其中的一个。具体实现如下:
def remove_duplicates(nums):
for i in range(len(nums) - 1, 0, -1):
if nums[i] == nums[i-1]:
del nums[i]
return nums
这个函数的参数是一个数组,返回值也是一个数组。函数中使用了 Python 自带的 del
关键字来删除数组中的元素。从数组的最后一个元素开始向前遍历,如果发现与前一个元素相同,就删除这个元素。需要注意的是,从后往前遍历的原因是如果从前往后遍历,删除元素的时候可能会导致下标错误。
但是,这种方法的时间复杂度比较高,为 O(n^2),因为每次删除都需要移动后面的元素。如果数组中有很多重复元素,就需要移动很多次,效率较低。
双指针删除的思路比较巧妙,可以将时间复杂度降到 O(n)。具体实现如下:
def remove_duplicates(nums):
if not nums:
return 0
i = 0
for j in range(1, len(nums)):
if nums[j] != nums[i]:
i += 1
nums[i] = nums[j]
return i + 1
这个函数和前面的函数不同,返回值是一个整数,表示没有重复元素的数组的长度。函数中使用了两个指针 i
和 j
, i
表示没有重复元素的数组的长度,初始值为 0; j
从 1 开始向后遍历数组。如果发现 nums[j]
和 nums[i]
不相等,说明 nums[j]
是一个新的元素,将其加入没有重复元素的数组中;如果 nums[j]
和 nums[i]
相等,说明 nums[j]
是一个重复元素,跳过即可。
这种方法的时间复杂度为 O(n),效率较高。
本文介绍了两种常用的删除数组中重复项的方法。遍历删除的时间复杂度比较高,只适合于数组中含有少量重复元素的情况;双指针删除的时间复杂度较低,可以处理大量重复元素的数组。实际开发中,可根据具体情况选择合适的方法。