博客
关于我
每日一题80-删除排序数组中的重复项 II
阅读量:731 次
发布时间:2019-03-21

本文共 901 字,大约阅读时间需要 3 分钟。

答案解题步骤

给定一个已排序的数组nums,目标是在原地删除重复元素,使得每个元素最多出现两次,同时返回修改后的数组长度。

方法思路

  • 问题分析:我们需要确保数组中的每个元素最多出现两次。如果有三个连续的相同元素,只保留前两个,第三个被删除。
  • 计数器设计:使用一个计数器count来跟踪当前元素的出现次数。初始值为1。
  • 遍历数组:遍历每个元素,检查当前元素与前一个元素的关系:
    • 如果当前元素等于前一个,说明重复,计数器加一。如果计数器超过两次,删除当前元素,并让索引移到前一个元素位置,恢复计数器。
    • 如果当前元素和前一个不同,重置计数器为1。
  • 原地修改数组:当需要删除元素时,直接删除,并相应调整索引,避免重复元素影响后续判断。
  • 优化后的算法步骤

  • 初始化索引和计数器i=1count=1
  • 遍历数组
    • 如果nums[i]等于nums[i-1],计数器加一。如果计数器超过2,删除nums[i],并减一索引。
    • 否则,计数器重置为1。然后继续遍历。
  • 返回新数组长度:处理完成后,返回数组长度。
  • 代码实现

    class Solution:    def removeDuplicates(self, nums: list[int]) -> int:        i, count = 1, 1        while i < len(nums):            if nums[i] == nums[i-1]:                count += 1                if count > 2:                    nums.pop(i)                    i -= 1            else:                count = 1            i += 1        return len(nums)

    解决思路总结

    通过在原地遍历数组并使用计数器来控制每个元素的出现次数,确保数组满足每个元素最多两次的条件。这种方法在时间复杂度上为O(n),空间复杂度为O(1),符合题目要求,且实现简洁高效。

    转载地址:http://idagz.baihongyu.com/

    你可能感兴趣的文章
    MySQL(3)DML详解
    查看>>
    MySQL(4)运算符 | 关联查询详解
    查看>>
    MySQL(5)条件查询 | 单行函数 | 事务详解
    查看>>
    Mysql,group by分组查询、order by排序查询、join连接查询、union联合查询
    查看>>
    Mysql,sql文件导入和导出
    查看>>
    MYSQL:int类型升级到bigint,对PHP开发语言影响
    查看>>
    Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
    查看>>
    MySQL:MySQL执行一条SQL查询语句的执行过程
    查看>>
    Mysql:SQL性能分析
    查看>>
    mysql:SQL按时间查询方法总结
    查看>>
    MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>
    MySQL:某个ip连接mysql失败次数过多,导致ip锁定
    查看>>
    MySQL:索引失效场景总结
    查看>>
    Mysql:避免重复的插入数据方法汇总
    查看>>
    MyS中的IF
    查看>>
    M_Map工具箱简介及地理图形绘制
    查看>>
    m_Orchestrate learning system---二十二、html代码如何变的容易
    查看>>
    M×N 形状 numpy.ndarray 的滑动窗口
    查看>>
    m个苹果放入n个盘子问题
    查看>>