酷代码 AI
菜单
服务商

C++ 去除重复数字并排序的实现与开发建议

### 🍃思路分析 根据提示,我们可以使用计数排序的思想来解决这个问题。计数排序是一种非比较排序算法,适用于数据范围较小的情况。在本题中,数字范围是从 0 到 100,非常适合使用计数排序。我们创建一个长度为 101 的数组 `count`,其中 `count[i]` 表示数字 `i` 出现的次数。遍历输入的数字,统计每个数字出现的次数,然后遍历 `count` 数组,若 `count[i]` 不为 0,则说明数字 `i` 出现过,将其输出。 ### 💻代码实现 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; // 初始化计数数组,用于记录每个数字出现的次数 int count[101] = {0}; // 读取输入的数字,并统计每个数字出现的次数 for (int i = 0; i < n; i++) { int num; cin >> num; count[num]++; } // 标记是否是第一个输出的数字 bool first = true; // 遍历计数数组,输出出现过的数字 for (int i = 0; i <= 100; i++) { if (count[i] > 0) { if (!first) { cout << " "; } cout << i; first = false; } } cout << endl; return 0; } ``` ### ⚙️代码解释 1. **输入处理**:首先读取输入的数字数量 `n`,然后创建一个长度为 101 的数组 `count`,用于记录每个数字出现的次数,初始值都为 0。 2. **计数统计**:使用 `for` 循环读取 `n` 个数字,并将对应的 `count` 数组元素加 1。 3. **输出结果**:遍历 `count` 数组,若 `count[i]` 大于 0,则说明数字 `i` 出现过,将其输出。为了避免输出多余的空格,使用 `first` 变量标记是否是第一个输出的数字。 ### 🚀复杂度分析 - **时间复杂度**:$O(n + k)$,其中 $n$ 是输入数字的数量,$k$ 是数字的范围(本题中 $k = 101$)。 - **空间复杂度**:$O(k)$,主要用于存储计数数组。 ### 🌟开发建议 - **输入验证**:可以添加输入验证,确保输入的数字在 0 到 100 的范围内。 - **错误处理**:可以处理输入异常,如输入的 `n` 不在 1 到 999 的范围内。 - **扩展性**:如果数字范围发生变化,可以修改计数数组的长度。 ### 📚学习资源 - [C++ 官方文档](https://en.cppreference.com/w/) - 《C++ Primer》:经典的 C++ 学习书籍,适合初学者和有一定基础的开发者。 ######[AI写代码神器 | 740点数解答 | 2026-03-27 19:23:37]

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