力扣之删除有序数组中的重复项

        力扣:26. 删除有序数组中的重复项 - 力扣(LeetCode)

        方法:双指针法。

        我的方法:

class Solution {
public:
    int removeDuplicates(vector& 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& 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)

你可能感兴趣的:(leetcode,算法,职场和发展)