首页 > 编程语言 >数组类算法题——删除有序数组中的重复项

数组类算法题——删除有序数组中的重复项

时间:2023-11-18 19:12:03浏览次数:38  
标签:删除 nums 重复 元素 int 算法 数组

删除有序数组中的重复项

题目:

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

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

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。

  • 返回 k

Code

int removeDuplicates(int* nums, int numsSize) {
    if(numsSize<=0)
        return 0;
    int leftIndex   = 0,rightIndex  = 1;
    for(;rightIndex<numsSize;rightIndex++)
    {
        if(nums[leftIndex] != nums[rightIndex])
        {
            nums[++leftIndex] = nums[rightIndex];
        }
    }
    return leftIndex+1;
}

 

 

思路

替换,将不重复的值移到左边

解题方法

两个index,一个leftIndex指向当前左边最大的数,另外一个rightIndex指向该值后面中不重复的值,然后leftIndex往后的一个位置的值。

复杂度

  • 时间复杂度:

$O(n)$

  • 空间复杂度:

$O(1)$

标签:删除,nums,重复,元素,int,算法,数组
From: https://www.cnblogs.com/Sna1lGo/p/17840951.html

相关文章

  • 代码随想录算法训练营第七天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和
    今日学习的文章链接和视频链接https://programmercarl.com/链表理论基础.html●454.四数相加IIvarfourSumCount=function(nums1,nums2,nums3,nums4){letcount=0letmap=newMap();for(letnumber1ofnums1){for(letnumber2ofnums......
  • Linux要删除的目录下出现了~目录怎么办
    可直接用以下命令删除’~’目录,而不影响当前用户主目录rm -rf \~`rm-rf\~`命令的作用是递归地删除名为‘~’的目录。解释一下这个命令的各个部分:-`rm`是Linux中用于删除文件和目录的命令。-`-r`选项表示递归删除,即删除目录及其所有内容。-`-f`选项表示强制删......
  • 代码随想录算法训练营第六天 |● 哈希表理论基础 ● 242.有效的字母异位词 ● 349.
    今日学习的文章链接和视频链接https://programmercarl.com/哈希表理论基础.html242.有效的字母异位词varisAnagram=function(s,t){if(s.length!==t.length)returnfalseletmap=newMap();for(letcharofs){if(!map.get(char)){......
  • 数组类算法题——数组中移除指定元素
    数组中移除指定元素 题目:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解......
  • C# 去掉Byte数组尾部的0x00
    ///<summary>///去除byte[]数组缓冲区内的尾部空白区;从末尾向前判断;///</summary>///<paramname="bytes"></param>///<returns></returns>publicbyte[]bytesTrimEnd(byte[]bytes)......
  • 【教3妹学编程-算法题】数位和相等数对的最大和
    3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定”2哥 :啥?18岁就当爹啦?3妹:确切的说是14岁好吧。2哥 :哎,想我30了,还是个单身狗。3妹:别急啊,2嫂肯定在某个地方等着你去娶她呢。又不是结婚越早越好。2哥:是啊,这孩子14岁当爹,也太早了。3妹:2哥,你找女朋友有什么条件没有......
  • MySQL数据库操作不再难:从查看到删除,一步步教你成为数据库高手!
    对数据库进行查询和修改操作的语言叫做SQL(StructuredQueryLanguage,结构化查询语言)。SQL语言是目前广泛使用的关系数据库标准语言,是各种数据库交互方式的基础。在之前的文章中,我们已经掌握了SQL语言的基本概念以及常用的DDL(数据定义)和DML(数据操作)语句。接下来,我们将探讨如何......
  • django 信号判断是新增、修改还是删除
    在Django的信号处理器中,你可以使用一些方法来确定信号是关于新增(create)、修改(update)还是删除(delete)的。这通常涉及到检查created和instance参数的值。以下是一个例子,展示了如何在信号处理器中判断是新增、修改还是删除:fromdjango.db.models.signalsimportpost_save,pre......
  • django 信号 新增和删除信的合用
    fromdjango.db.models.signalsimportpost_save,post_deletefromdjango.dispatchimportreceiverfromdjango.dbimporttransactionfrom.modelsimportMT002HModel@receiver(post_save,sender=MT002HModel)@receiver(post_delete,sender=MT002HModel)@transa......
  • ⦁ 二维数组传递参数
    #include<iostream>usingnamespacestd;//第一维长度为tvoidp1(inta[][5],intt){cout<<"第一种调用方式:"<<endl;for(inti=0;i<t;i++){for(intj=0;j<5;j++){cout<<a[i][j]<<"";......