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

        力扣: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值