3.Remove Duplicates from sorted array

Case 1: (Maintaining only one copy)

Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.

Example 1:

Input: nums = [1,1,2]
Output: 2, nums = [1,2]
Explanation: Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the returned length.

Example 2:

Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4]
Explanation: Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively. It doesn't matter what values are set beyond the returned length.
class Solution
{
public:
    int removeDuplicates(vector<int> &nums)
    {

        if (nums.size() == 0)
            return 0;
        
        int pos = 1;
        
        int size = nums.size();
        
        for (int i = 1; i < nums.size(); i++)
        {
            if(nums[i-1] != nums[i]){
                nums[pos] = nums[i];
                pos++;
            }
            else{
                size--;
            }
        }

        return size;
    }
};

Time Complexity: O(n) , Space Complexity: O(1)

Case II: (At most twice)

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Example 1:

Input: nums = [1,1,1,2,2,3]
Output: 5, nums = [1,1,2,2,3]
Explanation: Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively. It doesn't matter what you leave beyond the returned length.

Example 2:

Input: nums = [0,0,1,1,1,1,2,3,3]
Output: 7, nums = [0,0,1,1,2,3,3]
Explanation: Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively. It doesn't matter what values are set beyond the returned length.
class Solution
{
public:
    int removeDuplicates(vector<int> &nums)
    {
        
        if(nums.size()==0){return 0;}

        int size = nums.size();
        int val = nums[0];
        int count = 1;
        int pos = 1;
        
        for (int i = 1; i < nums.size(); i++)
        {
            //count is less than 2 and equal values
            if (nums[i] == val && count < 2)
            {
                count++;
                nums[pos] = nums[i];
                pos++;
            }
            //count is greater than 2 and equal values
            else if (nums[i] == val && count >= 2)
            {
                size--;
            }
            //different values values
            else if (nums[i] != val)
            {
                val = nums[i];
                nums[pos] = nums[i];
                pos++;
                count = 1;
            }
        }
        return size;
    }
};

Time Complexity: O(n) , Space Complexity: O(1)

Last updated