leetcode 腾讯50题 14/50 删除排序数组重复值

题目描述

给定一个有序的数组,设计原地算法移除数组中重复的数字。在原数组的基础上修改后,返回新数组的长度。
额外要求
不得占用额外空间去申请另一个数组,必须使用常数的空间。
样例
输入:
nums = [1, 1, 2]

输出:

length = 2
其中原数组已经修改为[1, 2],在length = 2之后的数字无关紧要。

思路

快慢指针
使用两个指针标记不重复数组和原数组的位置,首先判断数组不为空,为空直接输出0,当数组不空时,从第二个元素开始比较,若这一元素与上一元素都不相同,快慢指针都增加,且把这个不重复的元素加入到不重复集合中,遍历完后,k则是不重复元素的个数

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()==0)//空数组,直接返回
            return 0;
        int k=1;//慢指针
        for(int i=1;i<nums.size();i++){//块指针
            if(nums[i]!=nums[i-1]) {//不重复元素
                nums[k++]=nums[i]//加进去,慢部分加
                }
        }
        return k;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_34673038/article/details/90143111