26. Remove Duplicates from Sorted Array 已排序数组原地去重

26. Remove Duplicates from Sorted Array 已排序数组原地去重

题目描述

第一次解法:多情况讨论

int removeDuplicates(vector<int>& nums) {
    if (nums.size() <= 1) return nums.size();
    nums.push_back(nums[nums.size()-1]);
    int l=0;
    bool d=false;
    for(int j=1, prev=nums[0];j<nums.size();++j) {
        if (!d && nums[j]==prev) d=true, ++l;
        else if (d && nums[j]!=prev) nums[l++] = prev = nums[j];
        else if (!d && nums[j]!=prev) prev=nums[++l];
    }
    return l;
}

更好的解法:步长计数

int removeDuplicates(vector<int>& nums) {
    int count=0;
    for(int i=1;i<nums.size();++i) {
        if (nums[i]==nums[i-1]) ++count;
        else nums[i-count] = nums[i];
    }
    return nums.size()-count;
}

类似问题:去除某个元素值 题目描述

int removeElement(vector<int>& nums, int val) {
    int count=0;
    for(int i=0;i<nums.size();++i) {
        if (nums[i]==val) {
            ++count;
        } else {
            nums[i-count]=nums[i];
        }
    }
    return nums.size()-count;
}

类似问题:去重排序数组,元素至多出现 2 次? 题目描述

int removeDuplicates(vector<int>& nums) {
    if (nums.size()<=1) return nums.size();
    int i=0;
    for(auto n : nums) {
		// 保证第三次重复的元素不会被放进 [0~i] 中
        if (i<2 || n>nums[i-2]) nums[i++]=n;
    }
    return i;
}

#array