26. 删除有序数组中的重复项

Problem: 26. 删除有序数组中的重复项

Reference

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solutions/34033/shuang-zhi-zhen-shan-chu-zhong-fu-xiang-dai-you-hu/?envType=study-plan-v2&envId=top-interview-150

思路

与移除元素最主要的区别是,这个不是与固定元素比较,而是与自己比较。

如果快指针不断遍历,慢指针指向新数组。

如果快慢指针的值相等,快指针往后走,因为不需要相同的值。

如果快慢指针的值不相等,找到需要的值,往慢指针后跟新一个,慢指针往后走

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

class Solution {

public:

    int removeDuplicates(vector<int>& nums) {

        int p = 0;

        int q = 1; // 与移除元素哪一题最最主要的区别所在

        while (q < nums.size()) {

            if (nums[p] != nums[q]) {

                nums[p + 1] = nums[q]; // 与移除元素哪一题最最主要的区别所在

                p++;

            }

            q++;

        }

        return p + 1; // 与移除元素哪一题最最主要的区别所在

    }

};