04.删除有序数组中的重复元素2

删除有序数组中的重复元素2

LeetCode链接

https://leetcode.cn/problems/remove-duplicates-from-sorted-array-ii/submissions/?envType=study-plan-v2&envId=top-interview-150

解题思路

双指针

解题思路

  1. 使用两个指针,slow 和 fast ,slow 指向可覆盖位置,fast 用于遍历
  2. 遍历,比较快慢指针位置的值
  3. 相等,将 fast 指向的值赋值给 slow ,slow ++;反之 fast++,直至数组末尾

代码流程

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size() <= 2) return nums.size();

        int slow = 2, fast = 2;

        while(fast < nums.size()){
            if(nums[slow-2] != nums[fast]){
                nums[slow++] = nums[fast];
            }
            fast++;
        }
        
        return slow;
    }
};

复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)

总结

利用快慢指针保存可覆盖位置和用于遍历实现数据的删除

posted @ 2023-09-04 23:20  异世界穿越中!.!  阅读(20)  评论(0)    收藏  举报