Leetcode JAVA刷刷站(80)删除有序数组中的重复项 ||

news2024/9/23 5:25:17

一、题目概述 

 二、思路方向

       为了解决这个问题,我们可以使用双指针技术。一个指针(我们称之为i)用于遍历数组,另一个指针(我们称之为j)用于记录不重复或只重复一次的元素应该放置的位置。同时,我们需要一个计数器来跟踪当前元素出现的次数。

具体步骤如下:

  1. 初始化两个指针ij都指向数组的第一个元素,以及一个计数器count为1(因为当前元素至少出现了一次)。
  2. 遍历数组(从第二个元素开始,即i = 1),对于每个元素:
    • 如果当前元素与前一个元素相同(nums[i] == nums[i-1]),则增加计数器count
    • 如果计数器count小于等于2,说明当前元素(或其重复)还未达到两次,因此将其复制到nums[j]的位置,并递增j
    • 如果计数器count大于2,则忽略当前元素,不将其复制到nums[j]的位置,也不递增j
    • 在每次循环结束时,递增i以移动到下一个元素。
  3. 遍历完成后,j的值即为新数组的长度(不包含重复超过两次的元素)。

三、代码实现  

public class Solution {  
    public int removeDuplicates(int[] nums) {  
        if (nums == null || nums.length <= 2) {  
            return nums.length;  
        }  
          
        int i = 1; // 从第二个元素开始遍历  
        int j = 1; // 指向新数组(不重复或只重复一次的元素)的末尾  
        int count = 1; // 当前元素出现的次数  
          
        while (i < nums.length) {  
            if (nums[i] == nums[i-1]) {  
                count++;  
                if (count <= 2) {  
                    nums[j] = nums[i];  
                    j++;  
                }  
            } else {  
                count = 1; // 重置计数器,因为当前元素与前一个元素不同  
                nums[j] = nums[i];  
                j++;  
            }  
            i++;  
        }  
          
        return j; // 返回新数组的长度  
    }  
}

执行结果: 

四、小结

       这段代码的时间复杂度是O(n),其中n是数组nums的长度,因为我们只遍历了数组一次。空间复杂度是O(1),因为我们只使用了常数个额外变量。

 结语 

生活不是等待暴风雨过去

而是要学会在雨中跳舞

!!!

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

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

相关文章

创新实践:流媒体服务器如何推动WebRTC支持H.265及JS硬软解码(MSE硬解、WASM软解)

为了实现这一全面的解决方案&#xff0c;我们投入了近半年的时间进行调研与研发。我们的主要目标是&#xff1a;让流媒体服务器能够直接传输H.265编码的视频&#xff0c;而无需将其转码为H.264&#xff0c;从而使Chrome浏览器能够无缝解码并播放H.265视频。 值得注意的是&#…

TinaSDKV2.0 自定义系统开发

TinaSDKV2.0 自定义系统开发 什么是自定义系统&#xff1f; TinaSDK Kconfig界面配置 Tina Linux采用 Kconfig 机制对 SDK 和内核进行配置。 Kconfig 是一种固定格式的配置文件。Linux 编译环境中的 menuconfig 程序可以识别这种格式的配置文件&#xff0c;并提取出有效信息…

Flink常见数据源(source)使用教程(DataStream API)

前言 一个 Flink 程序,其实就是对 DataStream 的各种转换。具体来说,代码基本上都由以下几部分构成,如下图所示: 获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(exec…

探索上门回收旧衣物系统源码开发的创新与挑战

在当今社会&#xff0c;随着环保意识的日益增强和可持续发展的全球趋势&#xff0c;旧衣物回收与再利用成为了一个备受关注的议题。为了响应这一需求&#xff0c;开发一套高效、便捷的上门回收旧衣物系统&#xff0c;不仅有助于减少环境污染&#xff0c;还能促进资源的循环利用…

[数据集][目标检测]电力场景输电线导线散股检测数据集VOC+YOLO格式3890张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3890 标注数量(xml文件个数)&#xff1a;3890 标注数量(txt文件个数)&#xff1a;3890 标注…

Koa商城项目-商城模块(前端)

项目地址 koa_system: &#x1f525;&#x1f525;&#x1f525;Koa2 React商城项目前端-React Antd前端-Vue2 Element-plus后端-Koa2 Sequelizehttps://gitee.com/ah-ah-bao/koa_system 欢迎大家点击查看,方便的话点一个star~ 项目结构 Vue2Admin和Vue3Admin版本的后台还…

Deep-Live-Cam启动

实验环境 实验时间&#xff1a;2024年8月windows 10 专业版能跟老外对喷的网络环境基于 Anaconda 创建 Python 3.10.x 环境 其它依赖 下载生成工具&#xff1a;https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/安装单个组件&#xff1a;共三个。 安装ffm…

Python酷库之旅-第三方库Pandas(093)

目录 一、用法精讲 396、pandas.Series.to_frame方法 396-1、语法 396-2、参数 396-3、功能 396-4、返回值 396-5、说明 396-6、用法 396-6-1、数据准备 396-6-2、代码示例 396-6-3、结果输出 397、pandas.Series.to_xarray方法 397-1、语法 397-2、参数 397-3、…

算法的学习笔记—二叉树中和为某一值的路径

&#x1f600;前言 在二叉树中寻找和为某一特定值的路径问题是一个经典的面试题&#xff0c;考察了对二叉树的遍历能力以及递归和回溯算法的理解和应用。本文将详细解析这一问题&#xff0c;并提供一个Java实现。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1…

Java工具类之字符串类(超详细)

1、 字符串类 字符串是我们在编程中最常使用的一种数据类型&#xff0c;Java中用类来描述字符串&#xff0c;其中最常用的字符串处理类是String&#xff0c;此外还有StringBuffer和StringBuilder。在本节&#xff0c;我们会了解每种字符串处理类的特点&#xff0c;以便能在应用…

C语言基础(十二)

指针的用法&#xff1a; 测试代码1&#xff1a; #include "date.h" #include <stdio.h> // 函数声明&#xff0c;用于交换两个整数的值&#xff0c;通过指针传递 void swap(int *a, int *b); int main() { int time getTime();int nums[3] {3, 1, 4};…

CentOS 7.9 安装部署 EchoMimic

EchoMimic学习地址&#xff1a;https://github.com/BadToBest/EchoMimic CentOS 7.9 安装部署 EchoMimic 1、创建虚拟机2、基础环境准备2.1 安装驱动2.2 下载 Anaconda3-2024.06-1-Linux-x86_64.sh2.3 下载完成后执行2.4 退出客户端重新连一下2.5 查看python版本及cuda版本 3 E…

冷硬缓存——利用缓存滥用绕过 RPC 接口安全

介绍 MS-RPC 是 Windows 操作系统的基石之一。早在 20 世纪 90 年代发布,它就已扎根于系统的大部分部分。服务管理器?RPC。Lsass?RPC。COM?RPC。甚至一些针对域控制器的域操作也使用 RPC。鉴于 MS-RPC 已经变得如此普遍,您可以预料到它已经受到严格的审查、记录和研究。 …

TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核

TinyVision 使用 SyterKit 启动 Linux 6.7 主线内核 SyterKit SyterKit 是一个纯裸机框架&#xff0c;用于 TinyVision 或者其他 v851se/v851s/v851s3/v853 等芯片的开发板&#xff0c;SyterKit 使用 CMake 作为构建系统构建&#xff0c;支持多种应用与多种外设驱动。同时 Sy…

dbeaver数据库工具配置连接openGauss5.0

在DBeaver数据库工具中配置连接openGauss 5.0&#xff0c;可以通过以下步骤进行&#xff1a; 一、准备工作 下载openGauss JDBC驱动&#xff1a; 访问openGauss的官方网站&#xff08;如https://opengauss.org/zh/&#xff09;&#xff0c;下载适用于您操作系统的JDBC驱动。对…

【01】Eclipse中配置spring的xsd 便于从本地加载而非网络

spring xsd 文章目录 spring xsd1.spring的xsd在Eclipse中的配置1.1xsi:schemaLocation1.2Eclipse中设置的key名1.3在本地文件系统中选择xsd文件进行配置1.4在workspace工作空间中选择xsd文件进行配置 2.重点2.1Key的配置2.2spring配置文件中xml的xsi:schemaLocation的配置变更…

Java重修笔记 第三十九天 集合的体系、Collection方法、迭代器遍历集合、增强for循环遍历集合

集合的体系 1. 单列集合 2. 双列集合 Collection的常用方法 1. boolean add(E e) 添加元素&#xff0c;添加基本数据类型的元素有自动装箱的过程 2. boolean remove(Object o) 删除指定元素&#xff0c;删除成功返回true 3. boolean contains(Object o) 查询指定元素&…

深度学习入门-04

PS&#xff1a;基于小土堆视频学习 1、add_image()的使用 读取样本集中的数据 image_path "data/train/ants_image/0013035.jpg" from PIL import Image img Image.open(image_path)在pycharm的控制台中运行该代码&#xff0c;运行后可以发现&#xff1a; 数据格…

前端面试宝典【设计模式】【4】

在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…

学习大数据DAY44 帆软 report 配置

目录 Linux 系统独立部署 Tomcat 服务器设置 上机练习 Linux 系统独立部署 ## 题目要求 在 LINUX 系统&#xff0c; Tomcat 服务器容器下&#xff0c;完成 FineReport 报表工程的独立部 署&#xff0c;并设置服务器开机自启动&#xff0c;并请实操演示 得分点&#xf…