酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现非负整数排序去重输出(含标志数组与set两种解法)

## 🧩 题目解析 本题目要求读取 n 个非负整数,排序后去重输出。数值范围 0~1000 很小,可直接用标志数组或 `set` 解决。 ## 💻 C++ 实现方案 ```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; // 利用范围 0~1000 的特性,标志数组自动去重 bool exist[1001] = {false}; for (int i = 0; i < n; i++) { int x; cin >> x; exist[x] = true; } // 从小到大输出存在的数 for (int i = 0; i <= 1000; i++) { if (exist[i]) { cout << i << " "; } } cout << endl; return 0; } ``` ## 🛠 简化版(使用 set) ```cpp #include <iostream> #include <set> using namespace std; int main() { int n; cin >> n; set<int> s; for (int i = 0; i < n; i++) { int x; cin >> x; s.insert(x); } for (int v : s) { cout << v << " "; } cout << endl; return 0; } ``` ## 🧠 复杂度分析 标志数组法时间 O(n + 1000),空间 O(1000),常数极小。`set` 方法 O(n log n),适合更大数值范围。本题范围固定,首选标志数组。 ## 📝 关键点 - 输入可能包含重复数据,但标志数组天然处理去重。 - 输出末尾空格可接受,若需严格格式可判断 `i` 是否为最后一个有效值。 - 注意 `bool` 数组初始化为 `false`,这是 C++ 数组的默认行为(全局变量)或显式初始化(局部变量如上例)。 ######[AI问答 | 480点数解答 | 2026-08-20 22:05:02]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]