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

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

LeetCode链接

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

解题思路

1.使用API解决

解题思路

  1. 遍历,判断相邻两个元素是否相等
  2. 相等:就使用 erase() 函数删除多余元素;反之, 指针后移

代码流程

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {

        for(vector<int>::iterator it = nums.begin(); it != nums.end() - 1;){
            if(*it == *(it + 1)) {
                nums.erase(it+1);
            }else{
                 it++;
            }
        }

        return nums.size();
    }
};

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

2.双指针

解题思路

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

代码流程

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {

        if(nums.size() == 0) return 0;

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

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

总结

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

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