删除排序数组中的重复项

2023-10-29

删除排序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。

将最终结果插入 nums 的前 k 个位置后返回 k 。

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

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案
int k = removeDuplicates(nums); // 调用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过。

示例 1:

输入:nums = [1,1,2]

输出:2, nums = [1,2,_]

解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums 已按 升序 排列

一,暴力(时间复杂度O(n^2), 空间复杂度 O(1))

class Solution {
    public int removeDuplicates(int[] nums) {
    if(nums.length <=1) {
        return nums.length;
    }
    int pre=nums[0];
    int k=nums.length;
    for(int i=1;i<k;i++)
    {
        if(pre==nums[i])
        {
            for(int j=i;j<k;j++)
            {
                nums[j-1]=nums[j];
            }
            k--;
            i--;
        }
        else
        {
            pre=nums[i];
        }
    }
    return k;
    }
}

在这里插入图片描述

二,优化(时间复杂度O(n),空间复杂度O(1))

class Solution {
    public int removeDuplicates(int[] nums) {
    if(nums.length <=1) {
        return nums.length;
    }
    int j=0;
    for(int i=1;i<nums.length;i++)
    {
        if(nums[j]!=nums[i]){
            nums[++j]=nums[i];
        }
    }
    return j+1;
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除排序数组中的重复项 的相关文章

随机推荐

  • 自定义类型————结构体

    欢迎来到我的博文 基于这篇文章 期待你能对自定义类型结构体有一定的理解 目录 一 前言 二 结构体相关知识 三 写在最后 一 前言 C语言提供了一系列的内置数据类型 如 char short int long long long float
  • docker容器 - 基于CentOS8的基本部署及验证

    目录 容器基本部署 1 配置流量转发 2 确认软件源 3 安装组件 docker nginx服务镜像验证 docker centos系统镜像验证 容器基本部署 1 配置流量转发 1 1 配置流量转发相当于配置docker网络 创建文件 加入
  • 例说qt的QLineF::angle() 函数

    QlineF angle 函数在官方文档中如下定义 The angles are measured counter clockwise from a point on the x axis to the right of the origi
  • Apollo 源码解析 —— 客户端 API 配置(二)之 Config

    1 概述 老艿艿 本系列假定胖友已经阅读过 Apollo 官方 wiki 文档 特别是 Java 客户端使用指南 本文接 Apollo 源码解析 客户端 API 配置 一 之一览 一文 分享 Config 接口 及其子类 如下图 2 Con
  • go语言基础23实例

    go语言基础 文章目录 go语言基础 实例1 你好 世界 实例2 变量 实例3 循环 实例4 条件 实例5 条件分支 实例6 数组 实例7 切片 实例8 map映射 实例9 range语法 实例10 函数 实例11 指针 实例12 结构体
  • unbalanced parenthesis

    usr env python coding utf 8 import urllib import urllib2 import random import requests import os sys import MySQLdb from
  • java 自定义注解

    java 自定义注解 一 注解 二 示例 1 interface定义注解 2 getAnnotation获取注解 自定义功能 三 总结 一 注解 java注解可以理解为一种的程序特性的标注 该标注代表某一种功能 可在运行时反射来动态实现功能
  • 高频考察的七大排序算法(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 总览 名称 最坏时间复杂度 平均时间复杂度 空间复杂度 冒泡 O N
  • 神经网络学习笔记(六) 广义回归神经网络

    广义回归神经网络 GRNN General Regression Neural Network 广义回归神经网络是基于径向基函数神经网络的一种改进 结构分析 可以看出 这个结构与之前我们所讲过的径向基神经网络非常相似 区别就在于多了一层加和
  • 免费虚拟服务器怎么用,免费虚拟服务器试用一年

    免费虚拟服务器试用一年 内容精选 换一换 共享带宽可以实现多个弹性公网IP共同使用一条带宽 提供区域级别的带宽共享及复用能力 同一区域下的所有已绑定弹性公网IP的弹性云服务器 裸金属服务器 弹性负载均衡等实例共用一条带宽资源 客户有大量业务
  • 【计算机毕业设计】基于微信小程序的付费自习室系统

    毕设帮助 源码交流 技术解答 见文末 一 前言 忙碌的快节奏生活让很多人只能依靠碎片化时间进行充电 无法拿出大块的时间让自己能系统地进行学习 而 氛围感 和 仪式感 是我们独自学习的时候所体会不到的 每年的考试季 各大高校图书馆和公共图书馆
  • FreeRTOS例程4-串口DMA收发不定长数据

    FreeRTOS例程4 串口DMA收发不定长数据 知乎 zhihu com
  • Parameter ‘id‘ not found. Available parameters are [id , param1]

    Parameter id not found Available parameters are id param1 解决办法 1 删除Mapper接口中的 Param param 2 xml中写成 param xxx MyBatis传入参数
  • How to Write Doc Comments for the Javadoc Tool

    How to Write Doc Comments for the Javadoc Tool Javadoc Home Page This document describes the style guide tag and image c
  • data fastboot 擦除_fastboot命令大全

    刷机之家 fastboot命令能够帮助我们进行很多刷机相关操作 高通处理器手机在fastboot模式下使用fastboot exe文件配合fastboot命令就能够进行刷机 通过system img data img等各个分区的刷入从而完成
  • MIPI简介(一)——基础概念介绍

    MIPI全称Mobile Industry Processor Interface 即移动产业处理器接口 MIPI联盟在2003年由ARM Nokia ST TI等公司成立 成员包括手机设备制造商 半导体厂商 软件厂商 系统供应商 外围设备
  • 【记录】Git pull(拉取),push(上传)命令整理(详细)

    前言 博主最近在学习git命令 因为git是一个非常好用的分布式版本管理工具 功能比svn强大 与SVN不同点是Git去中心化 每一个分支都是一个中心 并且支持本地仓库存储 像如今很多大公司都用git做版本控制 话不多说 具体命令整理如下
  • 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架 该框架提供了用户 角色 权限管理功能 也提供了插件的管理和插件中心 下图是该界面框架的样式 全部源码和原理介绍下一篇分享 推荐越多 源码放的越早 呵呵 要使用该界面框架 你可以通过以下地址来下载到界面框架的Vi
  • Figma 笔记 常用快捷键

    画布 画框 gt 图层 gt 形状 快捷键 可在软件中查看快捷键信息 编辑快捷键 功能 L 切换到画线 Shift L 画箭头 O 切换到画圆 R 切换到画矩形 Shift X 填充 与 描边 切换 Ctrl Shift K 导入图片 支持
  • 删除排序数组中的重复项

    文章目录 删除排序数组中的重复项 一 暴力 时间复杂度O n 2 空间复杂度 O 1 二 优化 时间复杂度O n 空间复杂度O 1 删除排序数组中的重复项 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只