力扣数组刷题记录(26.删除有序数组中的重复项)

#include<iostream>
#include<vector>
#include<map>
#include<set>
using namespace std;

/*
删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
返回 k 。
*/

/*
思路:双指针
定义fast,slow两个指针,初始化都为下标1
fast指针指向当前遍历数组到达的下标位置
slow指针指向当前有序数组的下标位置
如果数组为空,则直接返回0
否则,fast指针从下标1遍历数组,已知数组为有序数组,那么如果nums[fast]!=nums[fast-1],则说明这之间没有出现重复元素
将这个值移动到有序数组中
即nums[slow]=nums[fast]
slow++;
否则说明有重复元素,则不进行上述操作
fast++;
数组从0到nums[slow-1]都是有序的
因此有序数组长度为slow
返回slow即可
*/

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n=nums.size();
        if(n==0){
            return 0;
        }
        int fast=1,slow=1;
        while(fast<n){
            if(nums[fast]!=nums[fast-1]){
                nums[slow]=nums[fast];
                slow++;
            }
            fast++;
        }

        return slow;

        
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值