返回
LeetCode 26. 删除排序数组中的重复项:高效优化指南
闲谈
2023-11-10 21:27:51
算法详解:双指针逐个击破
为了解决这个问题,我们引入了一种名为 "双指针" 的算法。双指针算法的核心思想是使用两个指针来遍历数组,一个指针负责跟踪当前扫描的位置,另一个指针负责标记重复元素的位置。具体步骤如下:
- 初始化两个指针: 一个指针
slow
指向数组的第一个元素,另一个指针fast
指向数组的第二个元素。 - 比较当前元素与前一个元素: 如果
fast
指向的元素与slow
指向的元素相等,则说明找到了一个重复元素。 - 如果当前元素与前一个元素不相等, 则将
slow
指向的元素的值复制到fast
指向的元素的位置,然后将fast
指向下一个元素。 - 重复步骤 2 和步骤 3, 直到
fast
指向数组的最后一个元素。
通过这种方式,我们就可以在原数组上删除重复元素,同时保证空间复杂度为 O(1)。
编程语言实现:C++、Python 和 Java
int removeDuplicates(vector<int>& nums) {
int slow = 0;
int fast = 1;
while (fast < nums.size()) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
fast++;
}
return slow + 1;
}
def removeDuplicates(nums):
slow = 0
fast = 1
while fast < len(nums):
if nums[fast] != nums[slow]:
slow += 1
nums[slow] = nums[fast]
fast += 1
return slow + 1
public int removeDuplicates(int[] nums) {
int slow = 0;
int fast = 1;
while (fast < nums.length) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
fast++;
}
return slow + 1;
}
结语
通过本文,我们深入探讨了 LeetCode 的第 26 道题——删除排序数组中的重复项。我们详细讲解了双指针算法的原理,并提供了多种编程语言的代码示例。希望这些内容能够帮助您更好地理解这一算法,并轻松解决相关编程问题。