leetcode26:删除有序数组中的重复项

leetcode26:删除有序数组中的重复项

方案一:依次遍历,如果不符合条件则冒泡交换到最后一个位置。o(n^2),结果超时

#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;
    }
};

方案二:迭代器遍历直接删除。通过✅

在这里插入代码片#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();
    }
};

猜你喜欢

转载自blog.csdn.net/gaochubusheng/article/details/134057927
今日推荐