0

0

c++中如何查找数组中的重复元素_c++数组重复元素查找方法

冰火之心

冰火之心

发布时间:2025-10-04 19:24:03

|

694人浏览过

|

来源于php中文网

原创

使用unordered_set可高效检测数组重复元素,时间复杂度O(n),代码简洁且适用范围广。

c++中如何查找数组中的重复元素_c++数组重复元素查找方法

在C++中查找数组中的重复元素,有多种方法可以实现,根据数据规模、性能要求和是否允许修改原数组,可以选择不同的策略。以下是几种常见且实用的方法。

使用STL set或unordered_set检测重复

利用set或unordered_set的唯一性特性,遍历数组并尝试插入每个元素。如果插入失败,说明该元素已存在,即为重复元素。

特点:代码简洁,时间复杂度约为O(n),推荐用于大多数场景。

  • set基于红黑树,有序,插入O(log n)
  • unordered_set基于哈希表,无序,平均插入O(1)

示例代码:

立即学习C++免费学习笔记(深入)”;

#include 
#include 
using namespace std;

void findDuplicates(int arr[], int n) { unordered_set seen; unordered_set duplicates;

for (int i = 0; i zuojiankuohaophpcn n; i++) {
    if (seen.find(arr[i]) != seen.end()) {
        duplicates.insert(arr[i]);
    } else {
        seen.insert(arr[i]);
    }
}

if (duplicates.empty()) {
    cout zuojiankuohaophpcnzuojiankuohaophpcn "无重复元素" zuojiankuohaophpcnzuojiankuohaophpcn endl;
} else {
    cout zuojiankuohaophpcnzuojiankuohaophpcn "重复元素:";
    for (int val : duplicates) {
        cout zuojiankuohaophpcnzuojiankuohaophpcn val zuojiankuohaophpcnzuojiankuohaophpcn " ";
    }
    cout zuojiankuohaophpcnzuojiankuohaophpcn endl;
}

}

排序后相邻比较

先对数组排序,然后遍历比较相邻元素。若arr[i] == arr[i+1],则为重复。

特点:会修改原数组顺序,时间复杂度O(n log n),空间占用小。

适用场景:不介意修改原数组,内存受限时可用。

PPT.AI
PPT.AI

AI PPT制作工具

下载
#include 
#include 
using namespace std;

void findDuplicatesSorted(int arr[], int n) { sort(arr, arr + n); bool hasDup = false;

for (int i = 0; i zuojiankuohaophpcn n - 1; i++) {
    if (arr[i] == arr[i+1]) {
        if (i == 0 || arr[i] != arr[i-1]) { // 避免重复输出
            cout zuojiankuohaophpcnzuojiankuohaophpcn arr[i] zuojiankuohaophpcnzuojiankuohaophpcn " ";
            hasDup = true;
        }
    }
}
if (!hasDup) cout zuojiankuohaophpcnzuojiankuohaophpcn "无重复";
cout zuojiankuohaophpcnzuojiankuohaophpcn endl;

}

使用频次映射(map或数组计数)

统计每个元素出现次数,再输出次数大于1的元素。

适合整数数组且数值范围不大时,可用计数数组;否则用map。

#include 
#include 
using namespace std;

void findDuplicatesMap(int arr[], int n) { map count; for (int i = 0; i < n; i++) { count[arr[i]]++; }

bool dup = false;
for (auto& pair : count) {
    if (pair.second youjiankuohaophpcn 1) {
        cout zuojiankuohaophpcnzuojiankuohaophpcn pair.first zuojiankuohaophpcnzuojiankuohaophpcn " ";
        dup = true;
    }
}
if (!dup) cout zuojiankuohaophpcnzuojiankuohaophpcn "无重复";
cout zuojiankuohaophpcnzuojiankuohaophpcn endl;

}

负数标记法(仅适用于正整数且值在索引范围内)

将数组本身作为哈希表使用。对于元素x,将arr[x-1]取负表示已访问。若再次访问到负值,说明重复。

限制多但空间O(1),适合特定题目。

注意:只适用于1 ≤ arr[i] ≤ n的情况。
void findDuplicatesInPlace(int arr[], int n) {
    bool hasDup = false;
    for (int i = 0; i < n; i++) {
        int index = abs(arr[i]) - 1;
        if (arr[index] < 0) {
            cout << abs(arr[i]) << " ";
            hasDup = true;
        } else {
            arr[index] = -arr[index];
        }
    }
    if (!hasDup) cout << "无重复";
    cout << endl;
}

基本上就这些常用方法。选择哪种取决于具体需求:追求速度用unordered_set,节省空间考虑排序或原地标记,需要统计频次就用map。实际编码中,unordered_set方案最推荐。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

25

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

36

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.27

excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

24

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

74

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.1万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号