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

1.删除排序数组中的重复项

时间:2023-05-11 10:45:27浏览次数:53  
标签:删除 nums int 元素 number ++ 数组 排序 指针

0.题目描述

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

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

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

题目链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/

考虑采用两种方法进行求解:

1.双指针法:

利用两个指针分别指向前一个元素和后一个元素 若左指针指向元素值等于右指针指向元素值,则左指针不动 右指针一直++
双指针法
class Solution {
public:

    int removeDuplicates(vector<int>& nums) {
        //双指针法
        int N = nums.size();
        if (N == 1)
            return N;
        int p1 = 0, p2 = 1;
        for (; p2 < N;p2++)
        {
            if (nums[p2] != nums[p1])
                nums[++p1] = nums[p2];
        }
        return p1+1;
    }
};

2.计数排序法法:

计数排序其实就是根据元素个数提前记录好相同元素个数置于表中 然后每次index跳过为前一个元素相同元素的值
计数排序法
class Solution {
public:
    //原地删除重复元素,已升序
    //感觉可以用计数排序
    int removeDuplicates(vector<int>& nums) {
        vector<int>v;
        int N = nums.size();
        if(N==1)
            return N;
        int number = 1;
        for (int i = 1; i < N; ++i)
        {
            if (nums[i] == nums[i - 1])
                number++;
            else
            {
                v.push_back(number);
                number = 1;
            }
        }
        if (nums[N - 1] != nums[N - 2])
            v.push_back(1);
        else
            v.push_back(number); //避免后面几个也相同
        number = v.size();
        for (int i = 1, k = 0; i < number; ++i)
        {
            k += v[i - 1];  //其实就是记录前面有多少个元素
            nums[i] = nums[k];
        }
        return number;
    }
};

标签:删除,nums,int,元素,number,++,数组,排序,指针
From: https://www.cnblogs.com/Kellen-Gram/p/17390323.html

相关文章

  • 删除数组A中与数组B的公共元素
    varA=[1,2,3,4,5,6,7];varB=[2,7]for(varn=0;n<B.length;n++){for(varm=0;m<A.length;m++){if(A[m]==B[n]){A.splice(m,1);m=m-1;}}}输出结果是:[1,3,4,5,6]关注我的公众号SpaceObj领取idea系列激活码......
  • java8 数组使用流和收集器格式化拼接数组中字符串并以“,”间隔,且首尾分别用 “[” 和
    方法:Stringresult=artist.stream().map(Art::getName).collect(Collectors.joining(",","[","]"));(注:joining(CharSequencedelimiter,CharSequenceprefix,CharSequencesuffix)方法接受一个字符串序列作为拼接符,并在拼接完成后添加传递的前缀和后缀。假如我们传递的分......
  • 排序
    //冒泡排序voidbubble_sort(int*a,intlen){//n-1次for(inti=0;i<len-1;i++){//比较相邻两个,大的后挪for(intj=0;j<len-i-1;j++){if(a[j]>a[j+1]){//比较相邻两个不满足要求//交换......
  • Java数组
    含义:数组是存储同一种数据类型多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型,分为一维数组和二维数组。一维数组:定义格式:格式 1 :数据类型 [] 数组名 ; (推荐的方式)格式 2 :数据类型 数组名 [];初始化:Java 中的数组必须先初始化 , 然后才能使用......
  • mysql 大表删除表数据
    创建硬链接,指向ibd文件lno_cust_from_spe_034.ibdo_cust_from_spe_034.ibd_2droptabledroptableo_cust_from_spe_034;使用linux的truncate命令逐步删除文件,释放空间seq2194-1010表示:从2194G开始,每次递减10,直到循环至10foriinseq58-1010;dosleep1......
  • 拓扑排序 - TopoSort
    拓扑排序-TopoSort前言wcy终于考上了心仪的大学,开启了精彩的大学生活!然而光是选课这一件事就把他难住了,因为一些课程包含先修课程:课程编号课程名称先修课程C1高等数学无C2程序设计基础无C3离散数学C1,C2C4数据结构C2,C3C5算法语言C2C6......
  • 两个数组间的距离值
    给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 。「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] 满足|arr1[i]-arr2[j]|<=d。示例1:输入:arr1=[4,5,8],arr2=[10,9,1,8],d=2输出:2......
  • Exchange批量删除邮件
     Add-PSSnapinmicrosoft.exchange*$Subject='警惕“退税”钓鱼邮件'$From="[email protected]"$Sent="05/09/2023"$Search="Sent:$SentANDFrom:$FromANDSubject:$Subject"$KQLQuery=[scriptblock]::create($Search)$TargetMailb......
  • MySQL的随机排序(random orderby)
    MySQL的随机排序(randomorderby)是指在查询数据库时,将结果集以随机的方式排列。这种排序方式可以用于有趣的应用场景,例如实现随机音乐播放、广告推荐等。要实现MySQL的随机排序,可以使用RAND()函数。RAND()函数可以生成0-1之间的随机数,将它作为排序的依据即可。SELECT*FROM`my......
  • php数组和网址URL参数的互相转换
    前言接口调试和开发的过程中,相信很多小伙伴都会经常用到数组和url参数的相互转换来模拟请求。其实不用自己再通过foreach或implode之类的手动实现,php自身的函数库给我们提供了两个方法,完全够用:一、http_build_query将数据转换为URL参数格式,返回一个URL编码后的字符串。......