【LeetCode】26. 删除有序数组中的重复项
1 题目描述
26. 删除有序数组中的重复项要求给定一个非严格递增排列的整数数组 nums
,要求原地删除数组中的重复元素,使得每个元素只出现一次,并返回删除重复元素后的数组长度。需要注意的是,元素的相对顺序应保持不变。
2 解题思路
本题的关键在于“原地删除”和“保持相对顺序”。由于数组是非严格递增的,我们可以利用双指针技术来解决这个问题。
- 左指针 (
left
):指向当前已知的不同元素的最后一个位置。 - 右指针 (
right
):用于遍历数组中的每一个元素。
当 right
指针所指向的元素与 left
指针所指向的元素不同,说明遇到了一个新的不同的元素。此时我们将 right
指针指向的元素复制到 left
指针后面的位置,并将 left
指针向前移动一位。这样就保证了数组中从头到 left
指针位置的所有元素都是唯一的。
3 Java 代码实现
public class Solution {
public int removeDuplicates(int[] nums) {
int left = 0;
int right = 1;
for (; right < nums.length; right++) {
if (nums[left] != nums[right]) {
nums[++left] = nums[right];
}
}
return left + 1;
}
}
4 注意事项
- 双指针:使用双指针技术,其中
left
指针追踪新数组的当前位置,而right
指针用于遍历整个数组。 - 原地修改:直接在原数组上进行修改,不需要额外的空间。
- 返回值:返回
left + 1
,即为不重复元素的数量。