LeetCode26——删除有序数组中的重复项

news2024/12/24 19:03:07

LeetCode26——删除有序数组中的重复项

在这里插入图片描述

在这里插入图片描述


自己的暴力解(假设可以使用额外的空间):
在这里插入图片描述
时间复杂度:O(N)
空间复杂度:O(N)

package keepcoding.leetcode.leetcode26;
/*给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

        考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

        更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
        返回 k 。*/
public class Result01 {
    public static void main(String[] args) {
        int[] arr1 = {1,2,2,3,3,3,4,4};
        int[] arr2 = {1,1,1,2,2,3,3,3,4,5,5,6,6,6,9,9,9};
        int[] arr3 = {1,1,2};
        removeDuplicates(arr1);
        System.out.println("==================================");
        removeDuplicates(arr2);
        System.out.println("==================================");
        removeDuplicates(arr3);

    }
    //暴力解(假设可以使用额外空间)
    public static void removeDuplicates(int[] arr){
        //根据传入数组的长度创建新的数组
        int[] temp = new int[arr.length];
        //计算temp数组中有效元素的个数
        int count = 0;
        //temp数组的下标,方便目标数组的元素存入temp
        int index = 0;
        for (int i = 0; i < arr.length-1; i++) {
            if (arr[i]!=arr[i+1]){
                //满足条件(不重复)的目标数组的元素存入temp数组
                temp[index] = arr[i];
                index++;
                count++;
            }
        }
        //上述for循环因为i+1数组下标越界问题,无法处理最后一个元素,这里手动将数组最后一个元素加入temp中
        //因为上述for循环必定已经将除了最后一个元素之前的所有满足条件的元素存入temp中,所以无论最后一个元素重复与否,都应存入最后一个位置的元素
            temp[index] = arr[arr.length-1];
            count++;

        printArray(temp);
        System.out.println(count);
    }
    public static void printArray(int[] arr){
        //打印数组
        for (int i = 0; i < arr.length; i++) {
            if (i==0){
                if(arr.length==1){
                    System.out.println("["+arr[0]+"]");
                }else {
                    System.out.print("["+arr[i]);
                }
            }else if(i==arr.length-1){
                System.out.println(","+arr[i]+"]");
            }else {
                System.out.print(","+arr[i]);
            }
        }
    }

}
时间复杂度:O(N)
空间复杂度:O(1)

官方的解较为巧妙(双指针):
在这里插入图片描述

在这里插入图片描述

 public static int removeDuplicates(int[] nums) {
        int n = nums.length;
        //如果数组 nums的长度为0,则数组不包含任何元素,因此返回 0。
        if (n == 0) {
            return 0;
        }
        //双指针
      /*
        当数组 nums的长度大于 0 时,数组中至少包含一个元素,在删除重复元素之后也至少剩下一个元素,
        因此 nums[0]\保持原状即可,从下标 1 开始删除重复元素。
        定义两个指针 fast 和 slow分别为快指针和慢指针,快指针表示遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置,
        初始时两个指针都指向下标 1。
        */
        int fast = 1, slow = 1;
        while (fast < n) {
            if (nums[fast] != nums[fast - 1]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }

}

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

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

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

相关文章

MySql 数据库基础概念,基本简单操作及数据类型介绍

文章目录 数据库基础为什么需要数据库&#xff1f;创建数据库mysql架构SQL语句分类编码集修改数据库属性数据库备份 表的基本操作存在时更新&#xff0c;不存在时插入 数据类型日期类型enum和set 数据库基础 以特定的格式保存文件&#xff0c;叫做数据库&#xff0c;这是狭义上…

水浸监测新方法,简单实用,你值得拥有!

随着科技的不断进步&#xff0c;监控系统已成为我们生活中不可或缺的一部分。然而&#xff0c;许多监控系统在面临水浸等自然灾害时显得无能为力&#xff0c;这可能导致严重的损失和危险。 因此&#xff0c;水浸监控系统的需求不断增加&#xff0c;以保护我们的财产和安全。 客…

用户标签管理系统怎么设计?用户标签系统应用场景介绍

随着市场竞争日益激烈&#xff0c;企业对于流量的需求也越来越大。然而&#xff0c;“公域流量”的成本不断攀升&#xff0c;企业难以承担&#xff0c;且转化方式往往是“一次性生意”&#xff0c;无法沉淀为企业自己的数据&#xff0c;因此企业开始转向私域流量的培养。但私域…

满分漏洞!思科未修补的零日漏洞正被积极利用

该漏洞允许攻击者在未进行身份验证的情况下远程获得受影响设备的全部管理员权限。 思科要求客户立即在其所有面向互联网的 IOS XE 设备上禁用 HTTPS 服务器功能&#xff0c;以防止攻击者利用操作系统 Web 用户界面中的一个关键零日漏洞。 思科 IOS XE 是思科用于下一代企业网络…

通讯协议学习之路:UART协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序、…

国产单片机PY32F002B,32位ARM架构Cortex -M0+内核,性价比高

PY32F002B是普冉推出的新一代入门级32位MCU&#xff0c;内核使用 ARM Cortex M0&#xff0c;主频最高支持到24M&#xff0c;24K FLASH 3K SRAM存储&#xff0c;并支持1.7V~5.5V宽工作电压&#xff0c;-40 ~ 85 C工作温度。拥有1 x 12 位ADC、I2C、SPI、USART、TIM、LPTIM、IWDT…

三相交错LLC软启动控制驱动波形分析--死区时间与占空比关系

三相交错LLC软启动控制驱动波形分析 文章目录 三相交错LLC软启动控制驱动波形分析一、电路原理二、时序分析三、环路分析四、控制策略1.软启动驱动波形趋势2.软启动驱动波形占空图3.软启动驱动波形详细图4.软启动代码分析5.Debug调试界面5.死区时间与实际输出5.1 死区时间50--对…

UnrealEngine5 - Niagara粒子系统问题 当发射器不在视口内时,发射物不可见

最近在弄一点点Niagara粒子系统&#xff0c;发现一个小问题&#xff0c;就是当发射器不在视口内时&#xff08;被物体阻挡也是一样的&#xff09;发射的粒子不可见 解决办法跳转 如下 若往前移动到发射器不在视口内&#xff0c;则发射物不可见 或将其阻挡&#xff08;阻挡物没…

情绪化软文怎么写?媒介盒子分享五大步骤

在网络营销中&#xff0c;情绪化软文通常已经成为品牌营销的重要手段之一&#xff0c;它旨在通过在文案内容中融入情感和故事性的元素&#xff0c;为品牌塑造鲜明的形象&#xff0c;和用户建立情感联系&#xff0c;并促使他们购买产品&#xff0c;提升对品牌的忠诚度&#xff0…

游戏数据分析工具该怎样选择?有哪些选择标准?

选择游戏数据分析工具时&#xff0c;可以考虑以下标准&#xff1a; 1、功能全面性 确保工具提供全面的功能&#xff0c;包括玩家行为分析、性能监测、用户留存率、收入分析等&#xff0c;以满足不同层面的需求。 2、易用性 选择界面友好、易于使用的工具&#xff0c;以确保团…

ros2 UR10仿真包运行

前言 一个月前安装了一下这个包&#xff0c;但是有报错。现在换了一个强劲的电脑&#xff0c;内存64G &#xff0c;显存39G &#xff0c;终于跑起来了&#xff0c;没有报错。网页控制器可以控制RVIZ中的机器人旋转。 vituralBOX中3D加速要勾选&#xff0c;这样才能发挥独立显…

青龙面板安装及配置

一、青龙面板安装 二、初始化配置 首次登录需要进行初始化配置 1、开始安装 2、账号设置 3、通知设置 通知方式 - 钉钉机器人 获取钉钉机器人的token和secret参考如下文章&#xff1a; 获取钉钉机器人的token及secret-CSDN博客 4、完成 5、登录 三、应用 待续

基于SSM的在线教育网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

2023年四川省网络与信息安全技能大赛初赛 团队赛 Writeup

文章目录 Web简单的登录web-game-1-2ezphp2easyLDweb-include-1-1 Pwnjustread ReverseEzGoMediumRev Cryptoeasyhashcrypto-rsa-1-1crypto-classical-1-1 MiscNo.11 is gone2misc-zip-1-1misc-pic-1-1 Web 简单的登录 给了信息 账号为学号密码为电话&#xff0c;写脚本爆破 …

Sectigo DV 通配符证书500元

Sectigo原名Comodo&#xff0c;是知名的CA认证机构。Sectigo旗下的SSL证书品牌产品特点是性价比高、签发速度快&#xff0c;在互联网安全领域&#xff0c;SSL证书的重要性日益凸显。随着数据泄露和网络攻击事件的增加&#xff0c;确保数据传输的安全性已成为当务之急。在这方面…

{大厂漏洞 } OA产品存在SQL注入

0x01 漏洞介绍 江苏叁拾叁-OA是由江苏叁拾叁信息技术有限公司开发的一款OA办公平台&#xff0c;主要有知识管理&#xff0c;工作流程&#xff0c;沟通交流&#xff0c;辅助办公&#xff0c;集成解决方案&#xff0c;应用支撑平台&#xff0c;基础支撑等功能。 该系统也与江苏叁…

stable-diffusion-webui sdxl模型代码分析

采样器这块基本都是用的k-diffusion&#xff0c;模型用的是stability的原生项目generative-models中的sgm&#xff0c;这点和fooocus不同&#xff0c;fooocus底层依赖comfyui中的models&#xff0c;comfy是用load_state_dict的方式解析的&#xff0c;用的load_checkpoint_guess…

RK3568驱动指南|第六篇-平台总线-第55章 初识设备树

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

封装一个滑块控制灯光组件

效果如下gif 只进行了基础的事件和布局&#xff0c;可优化的地方&#xff1a;luminance-box这个div加上后&#xff0c;由于和slider-run-way都是absolute定位&#xff0c;导致slider-run-way的点击事件无法设置值&#xff0c;只能通过滑块设置。暂时想不到咋处理&#xff0c;有…

淘宝代购系统需要电商API接口

在推广一篇淘宝代购系统时&#xff0c;了解电商API接口的重要性是很有必要的。电商API接口可以提供更高效、准确的数据传输和信息交流&#xff0c;从而实现更智能化的购物体验。下面我们将简单介绍电商API接口在推广淘宝代购系统中的应用。 一、数据交互与集成 电商API接口可…