LeetCode 26. 删除有序数组中的重复项:题解|刷题打卡

·  阅读 106

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

一、题目描述:

星期天到了,又到了 LeetCode 每日一道简单题的时候了。今天的每日一题,刚好我一年前也做过,所以今天不妨给它写篇题解吧。LeetCode 26. 删除有序数组中的重复项

image.png

二、思路分析:

如果题目要求的不是原地修改,我们可以创建一个新的 vector,然后循环遍历一遍原数组,如果新 vector 为空或者当前元素和 vector 的末尾不相等就将其 push_back()进去。但是题目要求的是原地修改,我们可以使用双指针的方法,用一个指针 ll 表示新数组的末尾下标,用一个指针 rr 表示原数组遍历到的元素下标,因为新数组的长度总是小于等于原数组,所以 llrr 不会相互影响。

三、AC 代码:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int l = 0, r = 0, n = nums.size();
        while (r < n) {
            int val = nums[r];
            while (r < n && nums[r] == val) {
                ++r;
            }
            nums[l++] = val;
        }
        return l;
    }
};
复制代码

四、总结:

删除有序数组中的重复项虽然简单,但是在处理离散化的时候是必不可少的。如果要处理的数据范围过大,而数据的数量却是可以接受的,我们就可以考虑将数据进行排序,然后删除重复项,再将元素和小范围的下标建立映射,对于有些题目这种做法可以优化时空复杂度,但那就是另外一个故事了。

分类:
代码人生
标签:
分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改