LeetCode 80—— 删除有序数组中的重复项 II

2024-04-14 1699阅读

阅读目录

    • 1. 题目
    • 2. 解题思路
    • 3. 代码实现

      1. 题目

      LeetCode 80—— 删除有序数组中的重复项 II

      2. 解题思路

      LeetCode 80—— 删除有序数组中的重复项 II

      • 让 index指向删除重复元素后数组的新长度;
      • 让 st_idx 指向重复元素的起始位置,而 i 指向重复元素的结束位置,duplicate_num代表重复元素的个数;
      • 一段重复元素结束后,这时候如果 st_idx = index,那么无需搬移数据,只让 index 前进最多 2 个位置即可,如上面上图到右图的过程所示;
      • 如果 st_idx != index,我们需要从 st_idx 开始最多搬移 2 个数据到 index 位置,如上面右图到左图的过程所示;
      • 此时,如果 i 指向最后一个元素,那么直接将最后一个元素搬移到 index 位置,直接返回;
      • 如果 i 还没有到最后一个元素,那么继续重复寻找下一段重复元素;

        3. 代码实现

        class Solution:
            def removeDuplicates(self, nums: List[int]) -> int:
                if len(nums)  
        

        时间复杂度为 O ( n ) O(n) O(n),最多遍历 2 遍数组,空间复杂度为 O ( 1 ) O(1) O(1)。

        当然了,上面的思路不容易理清,比较简单的一个实现是利用快慢指针。一开始快慢指针都指向第 3 个元素,如果 nums[fast] = nums[slow-2],说明重复元素超过了 2 个,只需要向前移动 fast 指针即可;如果 nums[fast] != nums[slow-2],那么把 fast 指针指向的元素移动到slow 指针,二者都前进一步。最后,slow指针指向的位置即为结果所求。

        class Solution {
        public:
            int removeDuplicates(vector& nums) {
                if (nums.size() 
                        
                        
                        
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]