首页 > 其他分享 >删除有序数组中的重复项

删除有序数组中的重复项

时间:2023-06-01 13:11:35浏览次数:34  
标签:数组 删除 nums 元素 fast 有序 指向 指针

   

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

 

使用双指针法,因为数据已经是排序的,可以使用两个指着:快指针和慢指针,将重复的元素放到数组的末尾,只保留不重复的元素。

具体而言,可以将慢指针指向数组的开头,快指针指向数组的第二个元素。如果两个元素指向的元素相等,则将快指针向前移动一位,否则,将慢指针向前移动一位,并将其所指向的元素替换为快指针所指向的元素。

 

// 删除重复出现的元素
// 使每个元素只出现一次
class Solution 
{
public:
    int removeDuplicates(vector<int>& nums) 
    {
       
        if(nums.empty())    return 0;    // 如果数组为空,返回0
        int low = 0;           // 慢指针指向数组开头
        // 快指针指向数组第二个元素
        for(int fast = 1; fast < nums.size(); fast++)
        {
            if(nums[fast] != nums[low])     // 如果两个指针指向的元素不相等
            {
                low++;
                nums[low] = nums[fast]; // 将慢指针指向的的元素替换为快指针指向的元素
            } 
        }

        return low + 1;
    }
};

  

标签:数组,删除,nums,元素,fast,有序,指向,指针
From: https://www.cnblogs.com/Bingley-Z/p/17448483.html

相关文章

  • python 合并k个有序链表
     fromheapqimportheappush,heappopclassSolution:defmergeKLists(self,lists):q=[]fori,headinenumerate(lists):ifhead:heappush(q,(head.val,i,head))node=dummy=ListNode(0)......
  • 合并两个有序链表
     将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  经典算法,采用递归法就行了,别的算法也有,但有限考虑能想得到的。每次将两个头节点值较小的链表 l1 和 l2 中的头结点合并,并返回合并后的头结点,递归地进行下去,直到......
  • shell脚本用来定时删除一些文件以及date的一些加减操作
     date命令加减操作:date+%Y%m%d#显示当天年月日date-d“+1day”+%Y%m%d#显示明天的日期date-d“-1day”+%Y%m%d#显示昨天的日期date-d“-1month”+%Y%m%d#显示上一月的日期date-d“+1month”+%Y%m%d#显示下一月的日期date-d“-1year”+%Y%m%d#显示前......
  • 原生JS输入姓名科目分数添加到表格,可删除
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • Git分支教程:详解分支创建、合并、删除等操作
    Git是一种强大的分布式版本控制系统,它的分支功能使得团队协作和代码管理变得更加灵活和高效。分支可以让开发人员在不影响主线开发的情况下进行并行开发和实验性工作。本篇博客将详解Git分支的创建、合并、删除等操作,帮助你更好地理解和使用Git的分支功能。分支的基本概念在开......
  • 如何在Java中创建数组列表
    为了在Java中存储动态大小的元素,我们使用了ArrayList。每当添加新元素时,它会自动增加其大小。ArrayList实现Java的List接口和Java的Collection的一部分。由于其功能和灵活性,它被广泛使用。ArrayList的关键点An ArrayList是一个可调整大小的数组,也称为动态数组。它根据新元素增加其......
  • 6567: 清点人数 树状数组
    描述 NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去。由于NK中学的学生很多,在火车开之前必须清点好人数。初始时,火车上没有学生。当同学们开始上火车时,年级主任从第一节车厢出发走到最后一节车厢,每节车厢随时都有可能有同学上下。年级主任走到第m节车......
  • 6566: 校门外的树2 树状数组
    描述  校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作:K=1,读入l,r表示在l到r之间种上一种树,每次操作种的树的种类都不同;K=2,读入l,r表示询问l到r之间有多少种树。注意:每个位置都可以重复种树。  ......
  • Java并发之原子性、可见性和有序性
    1.原子性1.1原子性的定义原子性:原子性即是一个或者多个操作,要么全程执行,并且执行的过程中不被任何因素打断,要么全部不执行。举个例子会更好理解:就像是我们去银行转账的时候,A给B转1000元,如果A的账户减少了1000之后,那么B的账户一定要增加1000。A的账户减钱,B的账户加钱,这两个操作......
  • Python连接es笔记四之创建和删除操作
    本文首发于公众号:Hunter后端原文链接:Python连接es笔记四之创建和删除操作这一篇笔记介绍一下索引和数据的创建和删除。其实对于索引来说,如果可以接触到kibana的话,可以很方便的在界面进行操作,这里简单介绍一下如何使用代码来操作索引的创建和删除。索引的创建和删除操作使......