时间轴

2025-09-28

init


题目:

std::unique 是 C++ 里的函数,它并不会真正删除容器里的元素,而是 将相邻的重复元素“移到后面”,并返回一个指向“新的逻辑末尾”的迭代器。配合 erase 可以实现删除重复元素。

1
2
3
4
5
6
7
8
9
10
11
#include <algorithm>
#include <vector>
using std::vector;

class Solution {
public:
int removeDuplicates(vector<int>& nums) {
nums.erase(std::unique(nums.begin(),nums.end()),nums.end());
return nums.size();
}
};

经典快慢指针解法:快指针表示遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置,初始时两个指针都指向下标 1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if (n == 0) {
return 0;
}
int fast = 1, slow = 1;
while (fast < n) {
if (nums[fast] != nums[fast - 1]) {
nums[slow] = nums[fast];
++slow;
}
++fast;
}
return slow;
}
};