力扣:26. 删除有序数组中的重复项 - 力扣(LeetCode)
方法:双指针法。
我的方法:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int slow =0,fast;
for(fast = 0; fast < nums.size() - 1 ; fast ++){
if(nums[fast] != nums[fast + 1]){
nums[slow ++ ] = nums[fast];
}
}
nums[slow ++] = nums[nums.size() - 1];
return slow;
}
};
fast指针是用来遍历数组,寻找符合要求的数组元素,slow是用来更新数组元素的。我的方法是判断右边的数字是否与自身相等,如果相等,fast++,直到到达了重复数组的右边界元素,放入到slow指向的位置。对于最后一个元素,不管有没有重复,都需要放入到新数组中。
其他的方法:
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(n == 0) return 0;
int j = 0;
for(int i = 0; i < n; i++){
if(nums[j] != nums[i]){
nums[++j] = nums[i];
}
}
return j + 1;
}
};
双指针解法
一个指针 i 进行数组遍历,另外一个指针 j 指向有效数组的最后一个位置。只有当 i 所指向的值和 j 不一致(不重复),才将 i 的值添加到 j 的下一位置。
附录: