80. 删除有序数组中的重复项 II【 力扣(LeetCode) 】

news2024/11/15 1:42:54

一、题目描述

  给你一个有序数组 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。不需要考虑数组中超出新长度后面的元素。

三、解题思路

  1. 基本思路:序列已经按照非严格递增的顺序排序,则重复的元素一定连续,则考虑用不需要删除的元素来填充需要删除的元素,来避免大量元素的移动。
  2. 具体思路:序列前两个元素一定不用删除,维护两个指针 i 和 k ,其中 i 初始化为 2,用于遍历序列,寻找不需要删除的元素;k 初始化为 1 ,用于存放不需要删除的元素。
    • 因为重复的元素一定连续,则如果指针 i 和指针 k 指向的元素不相同,说明该元素还没有保存,则指针 i 所指的元素是不用删除的,则将其保存给指针 k 。
    • 如果指针 i 和指针 k 指向的元素相同:
      • 如果指针 i 和指针 k-1 指向的元素不相同,说明该元素只保存了一次,所以该元素是不需要删除的,则将其保存给指针 k 。
      • 如果指针 i 和指针 k-1 指向的元素相同,说明该元素已经保存了两次了,则该元素需要删除。
    • 重复上述操作,直至遍历完序列为止。
  3. 扩展:需要删除重复元素且元素最多只能保存出现 x 次,则指针 i 与指针 k,k-1,… ,k-x+1 所指的元素不相同都是不需要删除的元素。【不知道算不算这一类问题的通解,嘿嘿!】

四、参考代码

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

int removeDuplicates(vector<int>& nums) {
    int n=nums.size();
    if(n<=2) return n;
    int k=1;
    for(int i=2;i<n;i++){
        if(nums[i]!=nums[k]||nums[i]!=nums[k-1])
            nums[++k]=nums[i];
    }
    return k+1;
}

测试结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈一谈爬虫开发工程师

爬虫就只是抓数据的吗&#xff1f;并不是&#xff0c;爬虫工程师的工作不再仅仅是抓取数据&#xff0c;还需要处理其他各种复杂问题&#xff0c;今天我们就来聊聊爬虫开发工程师。 一、 爬虫开发工程师工作内容 爬虫开发工程师是负责编写和维护网络爬虫程序的专业人员。他们的…

计算机技术基础 (bat 批处理)Note4

计算机技术基础 &#xff08;bat 批处理&#xff09;Note4 本节主要讲解一些 bat 批处理文件中的一些特殊符号&#xff0c;包括 , %, > 和 >>, |, ^, & 和 && 和 ||, " ", ,, ;, ()。 回显屏蔽符 回显屏蔽符 : 这个字符在批处理中的意思是关…

Redis一致性与分布式锁

Redis一致性 何为redis一致性 即在项目中&#xff0c;redis缓存中的数据要与数据库当中的数据保持一致。 那么这里&#xff0c;就会有小伙伴要问了&#xff0c;redis缓存中的数据不就是从数据库当中查询出来的吗&#xff1f;怎么会不一致呢&#xff1f; 笔者在这里解答一下…

数字信号||离散系统的冲激响应和阶跃响应(3)

实验三 离散系统的冲激响应和阶跃响应 一、实验目的 (1)加深对离散线性移不变(LSI)系统基本理论的理解&#xff0c;明确差分方程与系统函数之间的关系。 (2)初步了解用MATLAB语言进行离散时间系统研究的基本方法。 (3)掌握求解离散时间系统冲激响应和阶跃响应程序的编写方…

Proxmox8基于PC物理机/服务器安装,初始化,挂载磁盘,安装虚拟机

目录 安装文件 开始安装Proxmox 选择启动菜单&#xff0c;F11 后进入启动菜单选择 按需选择是否关闭RAID 选择对应的U盘 进入安装界面 进入安装启动过程 选择系统盘 设置相关信息 设置IP和开启root远程登录 设置dns 设置网卡ip 设置 ssh 远程登录 开机合并local-l…

Java---String类

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 在C语言中已经涉及到字符串了…

四、GD32 MCU 常见外设介绍 (6) ADC 模块介绍

6.1.ADC 基础知识 12 位逐次逼近式模数转换器模块&#xff08;ADC&#xff09;&#xff0c;可以采样来自于外部输入通道、内部输入通道的模拟信号&#xff0c;采样转换后&#xff0c;转换结果可以按照最低有效位对齐或最高有效位对齐的方式保存在相应的数据寄存器中。 6.2.GD…

go语言Gin框架的学习路线(十)

目录 GORM的CRUD教程 查询 普通查询 定义 User 结构体 查询所有用户 查询第一个用户 总结 条件查询 内联条件 额外查询选项 高级查询 链式操作 Scopes 多个立即执行方法 GORM的CRUD教程 CRUD 是 "Create, Read, Update, Delete"&#xff08;创建、查询…

数字图像处理中的常用特殊矩阵及MATLAB应用

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理中&#xff0c;为了提高编程效率&#xff0c;我们可以使用多种方式来创…

【UIE模型-傻瓜式教程】飞桨AI Studio中fork实体抽取任务(打车、快递单)并运行教程

文章目录 fork项目环境与数据准备微调训练验证与测试 fork项目 环境与数据准备 安装paddlenlp&#xff08;尽量装paddlenlp2.4.2&#xff0c;否则会报错&#xff01;&#xff09; 下载打车数据 转换数据格式&#xff0c;并划分训练集、验证集和测试集 微调训练 微调训练&#x…

WiFi通信——STM32通过ESP8266-01S与阿里云通信

嵌入式设计中常用的无线通信方式主要由蓝牙、WiFi、Zigbee、Lora、NB-IOT等等。这些是最常用的&#xff0c;也是在实际项目开发中根据项目的数据通信特点来选择相应的无线通信方式。本设计主要是讲解WiFi在嵌入式开发中的使用。 1. ESP8266-01S烧录固件 WiFi通信的频段和蓝牙一…

论文中的流程图参考图片

写论文的时候&#xff0c;在绘制流程图时&#xff0c;一直纠结n是大写还是小写&#xff0c;用不用斜体&#xff0c;号两边要不要空格。今天找到了一张标准的流程图来参考。图片来自 Zhi-Chang Ba et al, Combination of DCE-MRI and NME-DWI via Deep Neural Network for Predi…

学成在线开心学习

环境配置 第一章 项目介绍&环境搭建 项目背景 项目业务框架 项目技术架构 第二章 内容管理模块 本项目使用mybatis-plus的generator工程生成PO类、Mapper接口、Mapper的xml文件 模块工程 模型类的作用 课程查询接口 controller ApiOperation("课程查询接口&qu…

数字化就是要“用数字说话”运营,按“效果付费”经营

随着数字化技术的迅速发展&#xff0c;企业所处的市场环境发生了深刻的变革。在这个数字化转型时期&#xff0c;数据成为了企业决策的关键依据&#xff0c;“用数字说话”已成为企业运营的基本准则。而“效果付费”作为一种基于实际成果的商业模式&#xff0c;正逐渐受到企业经…

【QAC】Dashboard服务端如何配置

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决Dashboard服务端如何配置的问题。 2、 问题场景 客户想使用Dashboard&#xff0c;Dashboard服务端如何配置。 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2、机器环境&#xff1a;Windows 64bit 3…

Linux_权限3

Linux所对应的文件类型 1.在Win下&#xff0c;有文件类型&#xff0c;通常通过后缀标识 日常用的就是windows系统这里不做举例. 2.Linux的文件类型不通过后缀区分&#xff08;不代表Linux不用后缀) 其中需要注意的是第一个字符表示文件类型的含义 - :普通文件, 文本, 源代码…

AtCoder Beginner Contest 363(A~D题)

A - Piling Up 思路: 我们只需要找到下一阶段的下限。a / 100 是本阶段1 变成下一阶段&#xff0c;再 * 100变成下限&#xff0c;再与原来的相减即可。 代码: #include<bits/stdc.h> using namespace std; #define N 200010 typedef long long ll; typedef unsigned l…

Biomimetics 综述分享:肌电假肢手的交互操作控制综述

近些年假肢灵巧手成为了热点研究方向。此前有综述研究回顾了包括基于表面肌电信号的预测连续上肢运动的方法、基于表面肌电信号的多任务人机交互应用&#xff0c;以及肌电控制中的各种性能指标。近期&#xff0c;期刊Biomimetics&#xff08;JCR Q1&#xff09;发表了“面向肌电…

定时器+外部中断实现NEC红外线协议解码

一、前言 1.1 功能介绍 随着科技的进步和人们生活水平的提高&#xff0c;红外遥控器已经成为了日常生活中不可或缺的电子设备之一&#xff0c;广泛应用于电视、空调、音响等多种家电产品中。 传统的红外遥控器通常只能实现预设的有限功能&#xff0c;无法满足用户对设备更加智…

Mac 下华为鸿蒙 :DevEco Studio 开发工具下载

1.登录&#xff1a;华为开发者中心--开发--下载工具DevEco Studio 2.下载完成后 &#xff0c;安装&#xff0c;并创建一个新项目。 3.Tools --点击SDK Manager 下载SDK: 如果报&#xff1a;淘宝镜像源错误&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_H…