洛谷 P4305:[JLOI2011] 不重復數字 ← unordered_set

【題目來源】
https://www.luogu.com.cn/problem/P4305

【題目描述】
給定 n 個數,要求把其中重復的去掉,只保留第一次出現的數。

【輸入格式】
第一行一個整數 T,表示數據組數。
對于每組數據,第一行一個整數 n。第二行 n 個數,表示給定的數。

【輸出格式】
對于每組數據,輸出一行,為去重后剩下的數,兩個數之間用一個空格隔開。

【輸入樣例】
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

【輸出樣例】
1 2 18 3 19 6 5 4
1 2 3 4 5 6

【說明/提示】
對于 30% 的數據,n≤100,給出的數 ∈[0,100]。
對于 60% 的數據,n≤10^4,給出的數 ∈[0,10^4]。
對于 100% 的數據,1≤T≤50,1≤n≤
5×10^4給出的數在 32 位有符號整數范圍內

【算法分析】
● STL unordered_set:
https://cplusplus.com/reference/unordered_set/unordered_set/
unordered_set 是 C++ 標準庫中的無序集合容器,基于哈希表實現。

#include <bits/stdc++.h>
using namespace std;int main() {unordered_set<int> ust= {1,3,5};auto x=ust.insert(2);if(x.second) {cout<<"Insertion successful.";}
}

● STL unordered_map(哈希表)簡介
(1)https://cplusplus.com/reference/unordered_map/unordered_map/
在 C++ 中,unordered_map 是一個基于哈希表實現的關聯容器,它能夠存儲鍵值對(key-value pairs),并且允許通過鍵(key)來快速查找對應的值(value)。unordered_map 中的元素是
無序的,這意味著它們并不按照插入的順序或鍵的字母順序進行存儲。相反,unordered_map 利用哈希函數來組織數據,從而提供平均情況下接近 O(1) 的時間復雜度來進行查找、插入和刪除操作。
(2)https://cplusplus.com/reference/unordered_map/unordered_map/count/
unordered_map 中的 count 函數用于計算并返回與給定鍵(key)相匹配的元素的數量。
由于 unordered_map 不允許有重復的鍵,因此對于 unordered_map 來說,count 函數的返回值只能是 0 或 1。如果給定的鍵存在于 unordered_map 中,則 count 返回 1;如果不存在,則返回 0。

● 本題 unordered_map?實現詳見:
https://blog.csdn.net/hnjzsyjyj/article/details/149003522

【算法代碼:unordered_set
若 ust 為 unordered_set,則命令 ust.insert(x)
.second 獲取返回值的布爾部分。若為 false 表示元素已存在,若為 true 表示元素不存在

#include <bits/stdc++.h>
using namespace std;int main() {int T;cin>>T;while(T--) {int n,x;vector<int> v;unordered_set<int> ust;cin>>n;for(int i=0; i<n; i++) {cin>>x;if(ust.insert(x).second) {v.push_back(x);}}for(int t:v) cout<<t<<" ";cout<<endl;}return 0;
}/*
in:
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6out:
1 2 18 3 19 6 5 4
1 2 3 4 5 6
*/


【代碼比較】
本題基于?unordered_map 及 unordered_set 實現的代碼比較如下。

unordered_mapunordered_set

#include <bits/stdc++.h>
using namespace std;
?
int main() {
? ? int T;
? ? cin>>T;
? ? while(T--) {
? ? ? ? int n,x;? ? ? ??
? ? ? ? vector<int> v;
? ? ? ? unordered_map<int,bool> mp;
? ? ? ? cin>>n;
? ? ? ? for(int i=0; i<n; i++) {
? ? ? ? ? ? cin>>x;
? ? ? ? ? ? if(!mp[x]) {
? ? ? ? ? ? ? ? mp[x]=true;
? ? ? ? ? ? ? ? v.push_back(x);
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? for(int t:v) cout<<t<<" ";
? ? ? ? cout<<endl;
? ? }
? ? return 0;
}
?
/*
in:
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

out:
1 2 18 3 19 6 5 4
1 2 3 4 5 6
*/

#include <bits/stdc++.h>
using namespace std;

int main() {
? ? int T;
? ? cin>>T;
? ? while(T--) {
? ? ? ? int n,x;
? ? ? ? vector<int> v;
? ? ? ? unordered_set<int> ust;

? ? ? ? cin>>n;
? ? ? ? for(int i=0; i<n; i++) {
? ? ? ? ? ? cin>>x;
? ? ? ? ? ? if(ust.insert(x).second) {
? ? ? ? ? ? ? ? v.push_back(x);
? ? ? ? ? ? }
? ? ? ? }

? ? ? ?

? ? ? ? for(int t:v) cout<<t<<" ";
? ? ? ? cout<<endl;
? ? }
? ? return 0;
}

/*
in:
2
11
1 2 18 3 3 19 2 3 6 5 4
6
1 2 3 4 5 6

out:
1 2 18 3 19 6 5 4
1 2 3 4 5 6
*/





【參考文獻】
https://blog.csdn.net/hnjzsyjyj/article/details/149003522
https://blog.csdn.net/hnjzsyjyj/article/details/131628676
https://blog.csdn.net/hnjzsyjyj/article/details/149002577
https://www.luogu.com.cn/problem/solution/P4305

https://blog.csdn.net/qq_17807067/article/details/127550425


?


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87349.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32固件升級設計——SPIFLASH模擬U盤升級固件

目錄 概述 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分區定義 2、 主函數 3、配置USB 4、配置fatfs文件系統 5、程序跳轉 三、APP程序制作 四、工程配置&#xff08;默認KEIL5&#xff09; 五、運行測試 六…

解鎖阿里云日志服務SLS:云時代的日志管理利器

引言&#xff1a;開啟日志管理新篇 在云計算時代&#xff0c;數據如同企業的血液&#xff0c;源源不斷地產生并流動。從用戶的每一次點擊&#xff0c;到系統后臺的每一個操作&#xff0c;數據都在記錄著企業運營的軌跡。而在這些海量的數據中&#xff0c;日志數據占據著至關重…

Keye-VL-8B-Preview:由快手 Kwai Keye 團隊精心打造的尖端多模態大語言模型

&#x1f525; News 2025.06.26 &#x1f31f; 我們非常自豪地推出Kwai Keye-VL&#xff0c;這是快手Kwai Keye團隊精心打造的前沿多模態大語言模型。作為快手先進技術生態中的核心AI產品&#xff0c;Keye在視頻理解、視覺感知和推理任務方面表現卓越&#xff0c;樹立了新的性…

Web前端之JavaScript實現圖片圓環、圓環元素根據角度指向圓心、translate、rotate

MENU 前言效果HtmlStyleJavaScript 前言 代碼段創建了一個由6個WiFi圖標組成的圓形排列&#xff0c;每個圖標均勻分布在圓周上。 效果 Html 代碼 <div class"ring"><div class"item"><img class"img" src"../image/icon/W…

1 Studying《Computer Vision: Algorithms and Applications 2nd Edition》11-15

目錄 Chapter 11 Structure from motion and SLAM 11.1 幾何內稟校準 11.2 姿態估計 11.3 從運動中獲得的雙幀結構 11.4 從運動中提取多幀結構 11.5 同步定位與建圖&#xff08;SLAM&#xff09; 11.6 額外閱讀 Chapter 12 Depth estimation 12.1 極點幾何 12.2 稀疏…

phpstudy 可以按照mysql 數據庫

phpstudy 可以按照mysql 數據庫 PHPStudy&#xff08;小皮面板&#xff09;是一款專為開發者設計的集成環境工具&#xff0c;涵蓋服務器配置、開發環境搭建、網站部署等多項功能。以下是其核心用途及優勢的詳細解析&#xff1a; 一、開發環境快速搭建 一站式集成環境集成Apa…

Python搭建HTTP服務,如何用內網穿透快速遠程訪問?

Python的內置HTTP服務模塊是開發者工具箱中的瑞士軍刀&#xff0c;只需一行命令即可啟動一個功能完備的Web服務器。無論是前端工程師調試頁面、數據科學家共享Jupyter Notebook&#xff0c;還是后端開發者快速驗證API原型&#xff0c;Python HTTP服務都能以零配置的方式滿足需求…

撥號音識別系統的設計與實現

撥號音識別系統的設計與實現 摘要 本文設計并實現了一個完整的撥號音識別系統&#xff0c;該系統能夠自動識別電話號碼中的數字。系統基于雙音多頻(DTMF)技術原理&#xff0c;使用MATLAB開發&#xff0c;包含GUI界面展示處理過程和結果。系統支持從麥克風實時錄音或加載音頻文…

數據結構-樹詳解

樹簡介 樹存儲和組織具有層級結構的數據&#xff08;例&#xff1a;公司職級&#xff09;&#xff0c;就是一顆倒立生長的樹。 屬性&#xff1a; 遞歸n個節點有n-1個連接節點x的深度&#xff1a;節點x到根節點的最長路徑節點x的高度&#xff1a;節點x到葉子節點的最長路徑 …

【安卓Sensor框架-2】應用注冊Sensor 流程

注冊傳感器的核心流程為如下&#xff1a;應用層調用 SensorManager注冊傳感器&#xff0c;framework層創建SensorEventQueue對象&#xff08;事件隊列&#xff09;&#xff0c;通過JNI調用Native方法nativeEnableSensor()&#xff1b;SensorService服務端createEventQueue()創建…

新版本沒有docker-desktop-data分發 | docker desktop 鏡像遷移

在新版本的docker desktop中&#xff08;如4.42版本&#xff09;&#xff0c;鏡像遷移只需要更改路徑即可。如下&#xff1a; 打開docker desktop的設置&#xff08;圖1&#xff09;&#xff0c;將圖2的原來的地址C:\Users\用戶\AppData\Local\Docker\wsl修改為你想要的空文件…

EtherCAT SOEM源碼分析 - ec_init

ec_init SOEM主站一切開始的地方始于ec_init, 它是EtherCAT主站初始化的入口。初始化SOEM 主站&#xff0c;并綁定到socket到ifname。 /** Initialise lib in single NIC mode* param[in] ifname Dev name, f.e. "eth0"* return >0 if OK* see ecx_init*/ in…

84、原理解析-SpringApplication創建初始化流程

84、原理解析-SpringApplication初始化流程 # SpringApplication創建初始化流程原理解析 SpringApplication的創建和初始化是Spring Boot應用啟動的關鍵步驟&#xff0c;主要包括以下過程&#xff1a; ## 1. 創建SpringApplication實例 ### 1.1 調用構造函數 - 當調用SpringApp…

【數理邏輯】 選擇公理與集值映射

目錄 選擇公理1. 有限指標集 I I I2. 可數無限指標集 I I I &#xff08;簡稱為 ACC 或 ACω&#xff09;3. 不可數無限指標集 I I I4. 選擇公理的層級與數學應用5. 選擇公理的深層意義 集值映射的選擇函數1. 選擇公理的核心作用2. 不同情況下的依賴性分析3. AC 的必要性證明…

微信小程序使用wx.chooseImage上傳圖片時進行壓縮,并添加時間水印

在微信小程序的開發過程&#xff0c;經常會使用自帶的api(wx.chooseImage)進行圖片拍照或選擇圖片進行上傳&#xff0c;有時圖片太大&#xff0c;造成上傳和下載時過慢&#xff0c;現對圖片進行壓縮后上傳&#xff0c;以下是流程和代碼 一、小程序的版本選擇了3.2.5&#xff0…

RAII簡介

&#x1f4e6; 一、技術原理簡介&#xff1a;RAII是個“托管狂魔” 想象你有個健忘的朋友&#xff0c;每次借東西都會忘記歸還。RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;資源獲取即初始化&#xff09;就是C派來的“超級管家”&#xff1a; “你負…

微信小程序入門實例_____打造你的專屬單詞速記小程序

上次通過天氣查詢小程序&#xff0c;我們初探了微信小程序開發的世界。這次&#xff0c;咱們再挑戰一個有趣又實用的項目 ——“單詞速記小程序”。無論是學生黨備考&#xff0c;還是上班族提升英語&#xff0c;都能用得上&#xff01;接下來就跟著我&#xff0c;一步一步把它做…

gateway白名單存儲nacos,改成存儲數據庫

前言 很久沒寫博客了&#xff0c;csdn都開始ai潤色了&#xff0c;之前都是看相應框架的源碼看了個遍&#xff0c;感覺底層原理都差不多&#xff0c;這陣子著手改造了下gateway中的白名單&#xff0c;之前白名單存儲到nacos&#xff0c;要改成存到數據庫。里面涉及到淺淺的源碼…

ubentu服務器版本安裝Dify

Docker 中安裝Dify 首先安裝Docker 1. 克隆Dify代碼倉庫 從github克隆 Dify 源代碼至要本地環境。 我的ubentu服務器版本&#xff0c;我把源代碼下載到 /var/下 在var文件夾下執行 git clone https://github.com/langgenius/dify.git執行成功后&#xff0c;進入Dify源代碼的…

Redis分布式鎖實戰:從入門到生產級方案

目錄 一、為什么需要分布式鎖&#xff1f; 二、Redis分布式鎖核心特性 三、實現方案與代碼詳解 方案1&#xff1a;基礎版 SETNX EXPIRE 原理 代碼示例 問題 方案2&#xff1a;Redisson框架&#xff08;生產推薦&#xff09; 核心特性 代碼示例 優勢 方案3&#xff…