26. Remove Duplicates from Sorted Array
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:
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 1:
Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
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 k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
Constraints:
1 -100
nums is sorted in non-decreasing order.
?
1、双指针
2、索引 index
法一:?
class Solution {
public int removeDuplicates(int[] nums) {
// O(n)
int n = nums.length;
int slow = 0;
int fast = 1;
if (nums == null || n == 0) return 0;
while (fast < n) {
if (nums[slow] != nums[fast]) {
nums[slow + 1] = nums[fast];
++slow;
}
++fast;
}
return slow + 1;
}
}
?法二:
class Solution {
public int removeDuplicates(int[] nums) {
// O(n)
int n = nums.length;
if (n < 2) return n;
int j = 1;
for (int i = 1; i < n; i++) {
if (nums[i] != nums[i-1]) {
nums[j++] = nums[i];
}
}
return j;
}
}