描述

分析
写了半天代码,考虑还要删除nums的尾部元素(由于向前挪动,实际尾部已经挪到了前面)
官方给的双指针法没有考虑删除元素
由于数据具有升序的特点,因此可以保证在前面重复的元素一旦到头,后面的便不会遇到此元素。
因此可以采用快慢指针,用变量 cnt 记录当前非重复元素的下标。对于连续读到的重复元素,直到遇到非重复时才将这个元素放到前面 cnt 所在的位置。而后继续扫描,直到结束。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.empty()) return 0;
int cnt = 0;
for (int i = 1;i < nums.size();i++) {
if (nums[cnt] != nums[i]) {
cnt++;
nums[cnt] = nums[i];
}
}
return cnt + 1;
}
};
586

被折叠的 条评论
为什么被折叠?



