删除数组元素的套路-80. 删除有序数组中的重复项 II

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

Reference

https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/solutions/702644/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-yec2/?envType=study-plan-v2&envId=top-interview-150

思路

现在大概知道这种题目的模板了。

SmartSelect_20240316_134802_Samsung Notes.jpg

当然我们还要根据其他情况来变化,例如上一道题26. 删除有序数组中的重复项

就要变化为nums[slow+1] = nums[fast]

并且return slow+1

不仅仅是直接使用模板也要随机,应变。

例如这道题目的保留条件就是前两个元素不与当前元素相等

复杂度

时间复杂度:

添加时间复杂度, 示例: $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
32
33
34
35
36
37

class Solution {

public:

    int removeDuplicates(vector<int>& nums) {

        if (nums.size() <= 2) {

            return nums.size();

        }

        int p1 = 2;

        int p2 = 2;

        while (p2 < nums.size()) {

            if (nums[p1 - 2] != nums[p2]) {

                nums[p1] = nums[p2];

                p1++;

            }

            p2++;

        }

        return p1;

    }

};