LeetCode 26.删除有序数组中的重复项
题目:
给你一个非严格递增排列的数组
nums
,请你删除重原地复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums
中唯一元素的个数。
思路:
1、定义双指针i,j
2、j 用于记录不重复元素的索引,i 遍历数组
3、当 j = i 时,i ++ ;当 j != i 时,j ++ ,nums[ j ] = nums[ i ]
4、最后返回不重复的元素的数组长度return j + 1(+1:索引从0开始)
初始状态
因为此时 j != i ,j ++
j = i ,i ++
j != i ,j ++,nums[ j ] = nums[ i ]
依此类推,遍历完成后,
j
的值是新数组中最后一个不重复元素的索引。因此,新数组的长度是j + 1
代码:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int j = 0;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] != nums[j]) {
j++;
nums[j] = nums[i];
}
}
return j + 1;
}
};