26. Remove Duplicates from Sorted Array
Array, Two Pointers, AMateList ·Problem Statement
link: LeetCode.cn LeetCode Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then return the number of unique elements in nums.
Consider the number of unique elements of nums to be k, to get accepted, you need to do the following things:
Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially. The remaining elements of nums are not important as well as the size of nums. Return k. Custom Judge:
The judge will test your solution with the following code:
int[] nums = […]; // Input array int[] expectedNums = […]; // The expected answer with correct length
int k = removeDuplicates(nums); // Calls your implementation
assert k == expectedNums.length; for (int i = 0; i < k; i++) { assert nums[i] == expectedNums[i]; } If all assertions pass, then your solution will be accepted.
Example:
Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Constraints: 1 <= nums.length <= 3 * 104 -100 <= nums[i] <= 100 nums is sorted in non-decreasing order.
Solution Approach
The solution iterates through the sorted array, using a pointer to overwrite duplicates and keep only unique elements, ultimately returning the count of unique elements.
Algorithm
- Two Pointers Technique: The solution uses a two-pointers approach, where one pointer (p) tracks the position of the last unique element, and the other pointer (i) iterates through the array.
- In-Place Modification: As the array is traversed, whenever a new unique element is found, it is moved to the next position after the last unique element, effectively modifying the array in place.
- Efficient Performance: The algorithm runs in O(n) time complexity, where n is the length of the array, and uses O(1) additional space since it only relies on a few extra variables for its operation.
Implement
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if not nums:
return 0
p = 0
for i in range(1, len(nums)):
if nums[i] != nums[p]:
p += 1
nums[p] = nums[i]
return p + 1