力扣之删除有序数组中的重复项
力扣: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 的下一位置。
附录:
26. 删除有序数组中的重复项 - 力扣(LeetCode)