“删除有序数组中的重复项”
题目描述
给你一个升序排列的数组
nums
,请你 原地 删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组
nums
的前部分。更规范地说,若有k
个元素在数组nums
中保持不重复,则nums
的前k
个元素应该保存最终结果。返回
k
,即删除重复项后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组并在使用 O(1) 额外空间的条件下完成。
由于数组是有序的,重复的元素一定是相邻的。我们可以使用双指针法
来源:chatgpt
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int j = 1; // 初始化指针 j
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[i - 1]) { // 如果当前元素和前一个元素不同
nums[j] = nums[i]; // 将当前元素赋值给 nums[j]
j++; // 递增 j
}
}
return j; // 返回新数组的长度
}
}
和27题的区别:
初始化指针 j
为 1,因为第一个元素一定是不重复的。
用i和i--对比,i++用于遍历