26. 删除有序数组中的重复项

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

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

我的方法一:快慢指针

步骤

  1. slow和fast的指针分别指向去重后的最后一位和正在遍历的一位
  2. 如果slow和fast对应的值一样,说明重复了,所以忽略fast对应的值,将fast向后挪一位
  3. 如果slow和fast对应的值不一样,说明不重复,所以先将slow往后挪一位,将fast对应的值设置给slow,然后fast也往后挪一位;

初始条件

  1. slow=0 fast=1

边界条件

  1. 长度必须大于1,小于等于1直接返回原始长度即可
  2. 去重后的长度是slow++,因为slow是位置,长度需要+1

代码

class Solution {
public:
    int removeDuplicates(vector& nums) {
        if(nums.size() < 2) {
            return nums.size();
        }

        int n = nums.size();
        int slow = 0;
        int fast = 1;

        while(fast < n) {
            if(nums[fast] == nums[slow]) {
                fast++;
            }else{
                nums[++slow] = nums[fast++];
            }
        }

        return ++slow;
    }
};

你可能感兴趣的:(26. 删除有序数组中的重复项)