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

 一、介绍

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& nums){
        int n=nums.size();
        if(n==0) return 0;
        int p=1,q=1;
        while(q

LeeCode_26. 删除有序数组中的重复项(双指针)_第1张图片

你可能感兴趣的:(LeeCode/PTA/C++,c++,leecode,删重)