26.Remove Duplicates from Sorted Array

思路:
  • 记录每个元素前面有几个重复的数字,但是写的时候感觉容易出错,还是第二种好一点。复杂度(O(n))
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 0,k = 0;
        if(nums.size() < 2) return nums.size();
        for(i = 0; i < nums.size(); i++){
            nums[i-k] = nums[i];
            while(nums[i] == nums[i+1] && i < nums.size()-1){
                k++;
                i++;
            }
        }
        return nums.size()-k;
    }
};
  • 相当于设置两个指针,第一个指针记录新数组,第二个指针不断向后移动,遇到重复的跳过,遇到不同的则利用第一个指针进行覆盖。复杂度 (O(n))
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 0, j = 1;
        if(nums.size() < 2) return nums.size();
        for(i = 0; i < nums.size()-1; i++){
            if(nums[i] != nums[i+1]) nums[j++] = nums[i+1];
        }
        return j;
    }
};
原文地址:https://www.cnblogs.com/UniMilky/p/6954096.html