leetcode26: remove duplicates in ordered array

leetcode26: remove duplicates in ordered array

Option 1 : Traverse in sequence, and if the conditions are not met, bubble and swap to the last position. o(n^2), result timeout

#include <algorithm>
#include <iostream>

using namespace std;
class Solution {
    
    
public:
    int removeDuplicates(vector<int>& nums) {
    
    
        if (nums.size() == 1) {
    
    
            return 1;
        }
        int dupNum = 0;
        int i = 1;
        int pre = nums[0];
        while (i < nums.size() - dupNum) {
    
    
            int now = nums[i];
            if (now == pre) {
    
    
                for (int j = i; j < nums.size() - dupNum - 1; j++) {
    
    
                    std::swap(nums[j], nums[j+1]);
                }
                dupNum++;
            } else {
    
    
                i++;
            }
            pre = now;
        }
        return nums.size() - dupNum;
    }
};

Option 2 : Direct deletion through iterator traversal. by ✅

在这里插入代码片#include <algorithm>
#include <iostream>

using namespace std;
class Solution {
    
    
public:
    int removeDuplicates(vector<int>& nums) {
    
    
        if (nums.size() == 1) {
    
    
            return 1;
        }
        
        vector<int>::iterator ite = nums.begin();
        int pre = *ite;
        ite++;
        while (ite != nums.end()) {
    
    
            int now = *ite;
            if (now == pre) {
    
    
                ite = nums.erase(ite);
            }else {
    
    
                ite++;
            }
            pre = now;
        }
        
        return nums.size();
    }
};

Guess you like

Origin blog.csdn.net/gaochubusheng/article/details/134057927