LeetCode 26题 -> 删除排序数组中的重复项
1. 题目描述
-
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
注意:不要使用额外的数组空间,必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成。
-
示例:
nums = [1,1,2], 返回 2, 原数组 nums 的前两个元素被修改为 1, 2。 nums = [0,0,1,1,1,2,2,3,3,4], 返回 5, 原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
2. 解题思路
- 双指针法:
- ①定义两个指针l和r,l在前,r在后;
- ②判断nums[l]和nums[r]是否相等;
- ③若相等,则跳过,r++;
- ④若不相等,令l相邻的下一个位置的值num[l+1]等于nums[r],并且l++, r++;
- ⑤遍历完数组后,返回l+1,即为移除重复元素后数组的新长度。
3. 代码实现
public class RemoveDuplicates {
public static int removeDuplicates(int[] nums){
if(nums == null || nums.length < 2){
return 0;
}
int l = 0;
int r = 1;
while(r < nums.length){
if(nums[l] == nums[r]){
r++;
}else{
nums[l+1] = nums[r];
l++;
r++;
}
}
return l+1;
}
public static void main(String[] args) {
int[] nums = {0,0,1,1,1,2,2,3,3,4};
System.out.println(removeDuplicates(nums));
}
}