算法12:删除数组中的重复元素

吉林大学超星MOOC学习通高级语言程序设计 C++ 实验04 数组及其在程序设计中的应用(2024级)(3) 11.字符串反序 题目编号:Exp04-Basic10,GJBook3-06-12 题目名称:字符串反序 问题描述:编写程序,将给定的字符串反序输出。 输入:一个长度不超过255的字符串,字符串中可能含有空白字符。 输出:反序输出的字符串。 样例1: 输入 A 输出 A 样例2: 输入 123 45 输出 54 321 可能是网站oj系统的问题,不知大家用这个程序能不能跑过去 #include <iostream> #includ... 阅读详情

题目分析

有几种情况,如下:
1、有序数组,不能额外申请空间
2、无序数组,不能额外申请空间
3、无序数组,可以额外申请空间

算法分析

1、有序数组,不能额外申请空间
遍历一遍数组,并设置一个计数器,当前后遍历的数不相同是,计数器加1,并将计数器所在数组的位置等于当前遍历的值。

2、无序数组,不能额外申请空间
由于不能额外申请空间,需要先对数组进行快速排序

3、无序数组,可以额外申请空间
1)可以创建一个hash_map,遍历数组,采用find来过滤重复元素
2)可以使用STL的vector,采用erase和unique来删除重复元素

c++代码

1、有序数组,不能额外申请空间

//在不额外申请内存的前提下,删除重复元素
//sortBuffer:有序数组
//length: 有序数组长度
//newLength:无重复数组长度
bool RemoveDuplicates(int* sortBuffer,int length,int& newLength)
{
    if(sortBuffer == NULL || length == 0)
    {
        return false;
    }

    int count = 1;
    for(int i = 1; i < length; i++)
    {
        if(sortBuffer[i] == sortBuffer[i-1])
        {
            continue;
        }
        else
        {
            sortBuffer[count]=sortBuffer[i];
            count++;
        }
    }

    newLength = count;

    return true;
}

2、无序数组,不能额外申请空间
先快速排序,在调用RemoveDuplicates方法

3、无序数组,可以额外申请空间
1)可以创建一个hash_set,遍历数组,采用find来过滤重复元素

    int unsortBuffer[10] = {1,9,3,1,7,3,5,15,12,3};
    hash_set<int> hashSet;
    hashSet.clear();

    for(int i = 0; i < 10; i++)
    {
        if(hashSet.find(unsortBuffer[i]) == hashSet.end())
        {
            hashSet.insert(unsortBuffer[i]);
        }
    }

    cout<<"{1,9,3,1,7,3,5,15,12,3}, remove duplicates :"<<endl;
    for(hash_set<int>::iterator itor = hashSet.begin(); itor != hashSet.end(); itor++)
    {
        cout<<*itor<<",";
    }
    cout<<endl;

3、无序数组,可以额外申请空间
2)可以使用STL的vector,采用erase和unique来删除重复元素

    int unsortBuffer[10] = {1,9,3,1,7,3,5,15,12,3};
    vector<int> bufferVec;
    bufferVec.clear();
    for(int i = 0; i < 10; i++)
    {
        bufferVec.push_back(unsortBuffer[i]);
    }
    //先排序
    sort(bufferVec.begin(),bufferVec.end());
    //使用erase和unique移除vector中重复的元素
    bufferVec.erase(unique(bufferVec.begin(),bufferVec.end()),bufferVec.end());

    cout<<"{1,9,3,1,7,3,5,15,12,3}, remove duplicates :"<<endl;
    for(int i = 0; i < bufferVec.size(); i++)
    {
        cout<<bufferVec[i]<<",";
    }
STM32最小系统硬件组成详解 STM32最小系统硬件组成详解 0组成: 电源 复位 时钟 调试接口 启动 1、电源 : 一般3.3V LDO供电 加多个0.01uf去耦电容 2、复位:有三种复位方式:上电复位、手动复位、程序自动复位 通常低电平复位:(51单片机高电平复位,电容电阻位置调换) 上电复位,在上电瞬间,电容充电,RESET出现短暂的低电平,该低电平持续时间由电阻和电容共同决定,计... 阅读详情

相关推荐

C#通过Aforge调用电脑摄像头(附代码)

C#标准库本身不带有能调用电脑摄像头的库,如果利用windows自身的API来实现的话,着实有些麻烦。Aforge这个第三方库能很好的实现调用、处理的功能。 PS:文末给大家分享了完整的项目源码,各位最好先下载下来,对照着来看 1、先看一下效果 2、Aforge介绍 AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。 3、我使用的开发环境 操作系统

weixin_44996090的博客 1万+

数组 去除重复元素 的三种方法

方法一: 两层for循环遍历:第一次遍历数组中的每一个元素 arr[i]第二层遍历数组当前元素后的所有元素 arr[j],与当前元素相比较,若 == 当前元素,则删除arr[j],并将循环回退一步(删除元素后,会发生变化) 方法二: 准备一个新空数组,将需要去重的数组进行遍历,判断新数组中是否有当前元素,若没有,这push到新数组中 方法三: 利用ES标准中的新类型SetSet类型的对象:是值不能重复的集合像Set类型对象中添加新值时,如果Set中没

zm8454的博客 1万+

MCP协议桥接AdsPower:AI原生时代的浏览器自动化新范式

浏览器自动化是Web开发和数据采集领域的核心技术,其核心原理是通过程序控制浏览器内核执行页面导航、元素交互和数据提取等操作。传统方案如Selenium和Playwright虽功能强大,但在管理多实例、指纹隔离等复杂场景下,配置和维护成本较高。随着AI原生应用的发展,Model Context Protocol(MCP)作为一种标准化协议,为AI助手与外部工具间的通信提供了统一接口,显著提升了自动化流程的构建效率和自然语言交互能力。通过MCP Server桥接AdsPower指纹浏览器的本地API,开发者可将

weixin_30552811的博客 296

数组去重10种方法(干货)!!!

JavaScript数组去重的10种方法

m0_62284513的博客 2万+

高通Sensor Tuning实战:手把手教你用Chromatix生成并打包bin文件(附避坑指南)

本文详细介绍了高通Sensor Tuning的全流程实战,从Chromatix配置到Bin文件加载验证。通过手把手教程,帮助开发者掌握Chromatix工具链的使用,避免常见配置错误,提升调试效率。特别针对kalama等新一代平台,提供经过验证的解决方案和避坑指南。

ios99的博客 483

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

五个方法告诉你,如何去除数组中重复元素

每种方法都有其优缺点,你可以根据具体的场景和需求选择最适合的方法。在性能敏感的场景下,使用Set或Map通常会比使用循环更高效。

夏天的博客 8085

Orin 调试GMSL camera 96712手册重点

96712基础理解

乐于分享 9193

去除数组重复元素的四种方法

package com.yzycool.test; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /*去除重复的数组: *

奋斗的日子最甜美,在科技的海洋里,永无止境。 5745

芒果YOLOv8改进16:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

YOLOv8代码改进教程:即插即用|新颖轻量化非对称多级压缩LADH检测头🎈

包括YOLOv5、YOLOv7、YOLOv8等模型改进 5611

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

lammps构建高熵合金模型+结构优化初步筛选能量最小的结构

qq_45834835的博客 2604

数组去重的方法(十种方法)

数组去重的方法

lurenlinshen的博客 6907

金属表面粗糙度对信号的影响

之前的文章中,已经采用CST中的微带线模块进行了很多的仿真分析,本文将再次利用这些模块,从另外一个角度去探讨关于传输线的使用问题--金属的表面粗糙度。 众所周知,数据传输中,当速率越来越高时,信号在金属介质中的趋肤效应就愈发明显,能量就会更多地集中于金属的表面进行流动,此时,如果金属表面不再光滑而是凹凸不平,能量的传输过程就会产生波动,当这种波动积累到一定的量级,就会严重影响到传输线的阻抗稳定性,从而导致信号失真和传输异常。

一只豌豆象的博客 2895

2022/11/12 算法练习-删除有序数组中的重复元素

2022/11/12 算法练习-删除有序数组中的重复元素

m0_67443764的博客 268

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【LeetCode】26. 删除排序数组中的重复项(C++)

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 一、单指针遍历求解(耗时180ms) class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) { return 0; } //遍历指针 for

trancybao的博客 201

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetbook初级算法1_删除排序数组中的重复项

给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。 将最终结果插入 nums 的前 k 个位置后返回 k 。 不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成 作者:力扣 (L

m0_63182855的博客 284

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ 经典算法之删除有序数组中的重复项

给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。// 初始化两个指针fast和slow,fast用于遍历数组,slow用于记录非重复元素的索引。这种递增方式通常用于不需要递增后的值的场景,例如在一个表达式中使用原始值,然后递增变量。这种递增方式通常用于需要递增后的值的场景,例如在循环中使用递增后的值作为循环条件。// 返回slow的值,即非重复元素的数量。指针指向的元素与它前一个元素不同,那么将该元素复制到。指针的位置就是唯一元素的数量。

weixin_49670990的博客 867

删除有序数组中的重复项

这个函数利用了双指针的技巧,在遍历数组的同时,将不重复的元素依次复制到数组的前面,从而达到移除重复项的目的。注意,这里并没有创建一个新的数组来存储结果,而是直接在原数组上进行修改,因此空间复杂度为 O(1)。不需要考虑数组中超出新长度后面的元素。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。函数应该返回新的长度。的前两个元素被修改为。函数应该返回新的长度。的前五个元素被修改为。

beiqianqian的博客 275

LeetCode数组/字符串 26. 删除有序数组中的重复项

给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被。函数应该返回新的长度2,并且原数组nums的前两个元素被修改为1。不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度5。

2301_80072871的博客 371

c语言删除数组中重复元素

原题:把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,4},输出为:1,2,7,3,4,5,8 在csdn上查了一下,发现给出的方法都很复杂,对新手很不友好,于是写了一个比较简单的,源码如下: #include<stdio.h> #define N 12 int main() { int i,j,n=N,k; int num[N]...

VictorTinyEvil的博客 5万+

算法小练——删除排序链表中的重复元素

title: 算法小练——删除排序链表中的重复元素 categories: Algorithms tags: esay abbrlink: 65557854 date: 2019-11-12 18:06:45 删除排序链表中的重复元素 描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 示例 1: 输入: 1->1->2 输出: 1->2 示例...

李亚飞的博客 2945

c语言编程一、删除数组中重复元素

把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,7},输出为:1,2,7,3,4,5,8。

m0_68184101的博客 480

c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度

数组重复的问题在任何编程中都会有碰到了,这里介绍C语言删除无序整型数组中的重复元素及时间复杂度,希望对各位有帮助。遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr[] = { 1, 2, 2, 3, 4, 2, 3, 5 };)中重复的元素,并返回最终的长度。1 思路看到这道题的时候,第一反应就是需要删除元素,然后联想到单链表。但是后面一想还是不划算,因为单链表...

weixin_35749545的博客 1589

golang:删除数组中的重复元素,返回删除元素后数组长度,空间复杂度O(1)。

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 要求空间复杂度O(1)。 func delRepeatElem(nums []int) int { fmt.Println(nums, &nums[0]) for i := 0; i < len(nums)-1; i++ { if nums[i]^nums[i+1] == 0 { //重复元素执行异或操作等于0. nums = append(nums[:i], nums[

qq_33690342的博客 1545

java删除有序数组中的重复元素_Java算法题-删除有序数组中的重复元素

当前位置:IT大杂烩>JavaScript>Java算法题-删除有序数组中的重复元素Java算法题-删除有序数组中的重复元素www.someabcd.com网友分享于:Jun 8, 2018 9:33:40 AM题目:编写一个方法,删除有序数组中的重复元素。例如:数组:1,2,2,4,5,5,5,8,9,9,10。删除重复元素后:1,2,4,5,8,9,10。 RemoveRep...

weixin_35629057的博客 349

删除数组中的重复元素

方案1: 用set也很容易的   public static void main(String[] args) {         int[] nums = { 5, 6, 6, 6, 8, 8, 7 };         List numList = new ArrayList();         for (int i : nums)

Leader Honer|技术与管理,核心竞争力 1075
上一篇: 算法10:给一个array和一个target value, 检查array里是否存在两个数之和为target
下一篇: 算法13:检查一个表达式中的括号是否合法,括号包括 {, [, (, ), ], }
pplin
博客等级 码龄18年 6粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值