LeeCode_26. 删除有序数组中的重复项(双指针)

该博客介绍了如何解决LeetCode中的‘删除排序数组中的重复元素’问题,采用双指针方法实现原地修改,保证空间复杂度为O(1),并给出了具体的代码实现和测试样例。

 一、介绍

1.题目描述

题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

注意事项:

  • 原地删除
  • 输出为删除后元素个数
  • nums数组为引用方式传入

2.测试样例

[1,1,2]  # 2,[1,2]

[0,0,1,1,1,2,2,3,3,4]  # 5,[0,1,2,3,4]

二、题解🟢(双指针)

要求:

  • 原地删除重复元素
  • 记录删除后元素个数 k ,返回 k 。【答案将输出修改后数组的前 k 个数值】

1、令 p=1,q=1。p 为头指针,可记录元素个数,q 为尾指针,遍历完退出循环。

2、当 nums[q]==nums[q-1],说明重复,q++直到不重复元素出现

3、将新元素赋给 p 指向的位置,p++

4、结束循环后 p 代表当前元素个数,返回 p

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值