博客
关于我
每日一题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 四种存储引擎
    查看>>
    MySQL 在并发场景下的问题及解决思路
    查看>>
    MySQL 在控制台插入数据时,中文乱码问题的解决
    查看>>
    MySQL 基础架构
    查看>>
    MySQL 基础模块的面试题总结
    查看>>
    MySQL 处理插入重主键唯一键重复值办法
    查看>>
    MySQL 备份 Xtrabackup
    查看>>
    mysql 复杂查询_mysql中复杂查询
    查看>>
    mYSQL 外键约束
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>