Files
leetcode-master/problems/0026.删除排序数组中的重复项.md
youngyangyang04 ab7d15ea90 Update
2020-08-17 09:00:00 +08:00

2.5 KiB
Raw Blame History

题目地址

https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/

思路

此题使用双指针法O(n)的时间复杂度,拼速度的话,可以剪剪枝。

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

双指针法,动画如下:

其实双指针法在在数组和链表的操作中是非常常见的很多考察数组和链表操作的面试题都使用双指针法可以将时间复杂度O(n^2)的解法优化为 O(n)的解法,例如:

还有链表找环,也用到双指针:

大家都可以去做一做,感受一下双指针法的内在逻辑!

C++ 代码

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0; // 别忘记空数组的判断
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < (nums.size() - 1); fastIndex++){
            if(nums[fastIndex] != nums[fastIndex + 1]) { // 发现和后一个不相同
                nums[++slowIndex] = nums[fastIndex + 1]; //slowIndex = 0 的数据一定是不重复的,所以直接 ++slowIndex
            }
        }
        return slowIndex + 1; //别忘了slowIndex是从0开始的所以返回slowIndex + 1
    }
};

更过算法干货文章持续更新可以微信搜索「代码随想录」第一时间围观关注后回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等就可以获得我多年整理的学习资料。