当前位置: 首页 > article >正文

【leetcode热题100】删除排序数组中的重复项 II

  • 难度: 中等
  • 通过率: 39.0%
  • 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目描述

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。

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

示例 1:

给定 nums = [1,1,1,2,2,3],

函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,1,2,3,3],

函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

解法:

服了,自己折腾了半天想不出好办法。看了一下别人的解答,竟然如此简洁。

本问题有以下需要解决的点:

  1. 当前元素是否重复
  2. 当前元素应该移动到何处

使用 i 始终指向放置下一个元素的位置,即如果当前元素尚未重复两次,那么就 i+1。

class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """

        i = 0
        for n in nums:
            if i < 2 or n != nums[i - 2]:
                nums[i] = n
                i += 1

        return i

http://www.kler.cn/a/229253.html

相关文章:

  • Web3 时代,区块链与物联网的融合创新前景
  • electron 打包后的 exe 文件,运行后是空白窗口
  • 易语言文字识别OCR
  • 智能科技与共情能力加持,哈曼重新定义驾乘体验
  • 懒饭 3.0.2 | 谷歌版纯净无广告教做菜软件
  • 总结SpringBoot项目中读取resource目录下的文件多种方法
  • YOLO-World: Real-Time Open-Vocabulary Object Detection
  • SQL 表信息 | 统计 | 脚本
  • Polar-Net:通过 OCTA(光学相干断层扫描血管成像)检测阿尔茨海默病
  • CXYGZL - 年前最后一波更新了~
  • IDEA创建SpringBoot+Mybatis-Plus项目
  • docer compose部署simple-docker
  • SpringMVC-请求
  • 【实训】网络规划与部署实训
  • javaEE - 23( 21000 字 Servlet 入门 -1 )
  • 实践:微服务版本升级步骤以及maven仓库相关概念
  • python增量同步文件夹中的文件
  • 如何快速捕获和验证用户软件需求,实现快速迭代
  • 1978-2023年全国整体GDP平减指数计算模板(含计算公式代码+计算结果且可任意调整基期)
  • XCTF:3-1[WriteUP]
  • SpringBoot日志插件log4J和slf4J的使用和比较含完整示例
  • Python学习路线 - Python语言基础入门 - 面向对象
  • C# Onnx GroundingDINO 开放世界目标检测
  • FPGA解码MIPI视频:Xilinx Artix7-35T低端FPGA,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持
  • Vivado用ILA抓波形保存为CSV文件
  • 大数据Zookeeper--案例