Python每日一练之删除有序数组中的重复项

 更新时间:2025年11月05日 10:50:40   作者:会飞的云1024  
在Python中删除数组中的重复项可以通过多种方法实现,这篇文章主要介绍了Python每日一练之删除有序数组中的重复项的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

1. 问题描述

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

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

示例 1:

输入:nums = [1,1,1,2,2,3] 输出:5, nums = [1,1,2,2,3] 解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。 不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,1,2,3,3] 输出:7, nums = [0,0,1,1,2,3,3] 解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。

2. 问题分析

使用滑动窗口+删除元素的方法。

对于nums = [1,1,1,2,2,3]

(1)窗口[1,1,1], 长度=3>2,删除第3个1---->[1,1,2,2,3]

(2)窗口[2,2],长度=2<=2,保留

(3)窗口[3],长度=1<=2,保留

结果:[1,1,2,2,3], 长度=5、

3. 算法思路

思路:

(1)定义窗口: beginIndex和endIndex标记相同元素的起始和结束位置

(2)遍历数组:用endIndex向右扩展,找到相同元素的连续区间

(3)处理重复:当遇到不同元素时,检查当前连续区间的长度

如果长度>2,删除多余的元素

如果长度<=2,直接移动指针

4. 代码实现

from typing import List

class Solution:
    def remove(self, nums: List[int]) -> int:
        if len(nums) <= 2:
            return len(nums)

        slow = 2  # 从第三个位置开始检查

        for fast in range(2, len(nums)):
            # 如果当前元素不等于slow指针前两个位置的元素
            # 说明可以保留当前元素
            if nums[fast] != nums[slow - 2]:
                nums[slow] = nums[fast]
                slow += 1

        return slow

    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        beginIndex = 0
        endIndex = 0
        value = nums[beginIndex]
        while endIndex < len(nums):
            if nums[endIndex] == value:
                endIndex += 1
            else:
                if endIndex - beginIndex > 2:
                    for i in range(endIndex-1, beginIndex+1, -1):
                        nums.pop(i)
                    beginIndex = beginIndex + 2
                    endIndex = beginIndex
                    value = nums[beginIndex]
                else:
                    beginIndex = endIndex
                    value = nums[beginIndex]

        if endIndex - beginIndex > 2:
            for i in range(endIndex-1, beginIndex+1, -1):
                nums.pop(i)
        return len(nums)

if __name__ == '__main__':
    #print(Solution().removeDuplicates([1,1,1]))
    #print(Solution().removeDuplicates([1,1,1,2,2,3]))
    print(Solution().removeDuplicates([0,0,1,1,1,1,2,3,3]))

这个算法的代码思路直观,容易理解,使用滑动窗口的概念,但是时间复杂度高,pop(i)操作是O(n),最坏情况时间复杂度是O(n^2),并且需要处理多个边界情况,频繁删除操作导致数组元素频繁移动。可以尝试使用双指针法,时间复杂度降为O(n).

总结

到此这篇关于Python每日一练之删除有序数组中的重复项的文章就介绍到这了,更多相关Python删除有序数组中的重复项内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch实现多项式回归

    pytorch实现多项式回归

    这篇文章主要为大家详细介绍了pytorch实现多项式回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Python实现图片添加文字

    Python实现图片添加文字

    这篇文章主要为大家详细介绍了Python实现图片添加文字,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 详解Pytorch如何利用yaml定义卷积网络

    详解Pytorch如何利用yaml定义卷积网络

    大多数卷积神经网络都是直接通过写一个Model类来定义的,这样写的代码其实是比较好懂,也很方便。但是本文将介绍另一个方法:利用yaml定义卷积网络,感兴趣的可以了解一下
    2022-10-10
  • 终端能到import模块 解决jupyter notebook无法导入的问题

    终端能到import模块 解决jupyter notebook无法导入的问题

    这篇文章主要介绍了在终端能到import模块 而在jupyter notebook无法导入的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 15款Python编辑器的优缺点,别再问我“选什么编辑器”啦

    15款Python编辑器的优缺点,别再问我“选什么编辑器”啦

    这篇文章主要介绍了15款Python编辑器的优缺点,别再问我“选什么编辑器”啦,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-10-10
  • 详解Python requests 超时和重试的方法

    详解Python requests 超时和重试的方法

    这篇文章主要介绍了详解Python requests 超时和重试的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • python画图--输出指定像素点的颜色值方法

    python画图--输出指定像素点的颜色值方法

    今天小编就为大家分享一篇python画图--输出指定像素点的颜色值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python SQL查询并生成json文件操作示例

    Python SQL查询并生成json文件操作示例

    这篇文章主要介绍了Python SQL查询并生成json文件操作,涉及Python基于mssqlhelper模块进行mysql数据库查询与json格式文件生成相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • 关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题

    关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题

    这篇文章主要介绍了关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • win10从零安装配置pytorch全过程图文详解

    win10从零安装配置pytorch全过程图文详解

    这篇文章主要介绍了win10从零安装配置pytorch全过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论