题目
题目分析
使用快慢指针的方式,双指针分别为 slow 和 fast,开始时都指向第一个元素。fast 指针向后遍历数组,如果发现不重复的元素,就将它移到 slow 指向的位置,然后 slow 指针右移一位。
这段代码实现了原地删除重复元素,并保持了相对顺序。最后返回的 slow + 1 即为唯一元素的个数。
#include <vector>
class Solution {
public:
int removeDuplicates(std::vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int slow = 0; // 慢指针
for (int fast = 1; fast < nums.size(); ++fast) {
if (nums[fast] != nums[slow]) {
// 不重复的元素,慢指针右移并更新
++slow;
nums[slow] = nums[fast];
}
}
// 返回唯一元素的个数
return slow + 1;
}
};
···