返回
用 C++ 轻松搞定 LeetCode-26:删除有序数组中的重复项
闲谈
2024-02-06 23:17:58
删除有序数组中的重复项:如何用 C++ 解决 LeetCode-26
面对 LeetCode 众多难题,相信各位程序员都曾为一道题目而绞尽脑汁,那就是 LeetCode-26。LeetCode-26 要求我们删除有序数组中的重复项,并将修改后的数组返回。看起来很简单,但其中的技巧却不容小觑。本文将从 C++ 的角度出发,提供一种简洁高效的解决方法,帮助大家轻松应对 LeetCode-26。
算法思想
我们知道,有序数组的特点是元素从小到大排列。因此,我们可以使用双指针法来遍历数组,并不断更新结果数组。具体步骤如下:
- 初始化两个指针
slow
和fast
,其中slow
指向结果数组的当前位置,fast
指向待检查元素。 - 移动
fast
指针,直到找到一个与nums[slow]
不同的元素。 - 如果
fast
指针找到了一个不同的元素,则将nums[fast]
赋值给nums[slow+1]
,并移动slow
指针。 - 重复步骤 2-3,直到
fast
指针遍历完整个数组。 - 返回结果数组
nums
,其中nums[0:slow]
为不包含重复元素的数组。
C++ 代码实现
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int slow = 0;
for (int fast = 1; fast < nums.size(); fast++) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
}
return slow + 1;
}
};
代码分析
这段 C++ 代码简洁明了,完美地体现了双指针法的精髓。
- 首先判断数组是否为空,如果为空直接返回 0。
- 使用
slow
和fast
两个指针,初始时slow
指向数组的第一个元素,fast
指向第二个元素。 - 进入循环,
fast
指针不断向后遍历数组,直到找到一个与nums[slow]
不同的元素。 - 如果找到不同的元素,则将该元素赋值给
nums[slow+1]
,并将slow
指针右移一位。 - 重复步骤 3-4,直到
fast
指针遍历完整个数组。 - 最后返回
slow + 1
,表示不包含重复元素的数组的长度。
运行结果
对于输入 [1,1,2,2,3,3,4,4,5,5]
,该算法将返回 [1,2,3,4,5]
。
总结
使用双指针法,我们可以高效地解决 LeetCode-26 问题,删除有序数组中的重复项。C++ 代码实现简洁优雅,只需短短几行代码就能完成任务。希望本文对大家有所帮助,祝各位在 LeetCode 的征程中披荆斩棘,百战不殆。