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

C++计数排序去重并升序输出(0~100整数范围)

根据题目要求,这是一个**去重后排序**的问题,且数据范围明确为0~100的整数,非常适合使用**计数排序**思路解决。下面给出C++实现。 ## 🧠 解题思路 - 利用 `cnt[101]` 数组记录每个数字出现的次数(因为范围是0~100)。 - 输入时,对每个数字 `x` 执行 `cnt[x]++`。 - 输出时,从0到100遍历 `cnt`,如果 `cnt[i] > 0` 则输出 `i`,即可实现去重且按升序输出。 ## 💻 完整代码 ```cpp #include <iostream> using namespace std; int main() { int n; cin >> n; int cnt[101] = {0}; // 0~100 共101个可能取值 for (int i = 0; i < n; i++) { int x; cin >> x; cnt[x]++; } bool first = true; // 控制空格格式 for (int i = 0; i <= 100; i++) { if (cnt[i] > 0) { if (!first) cout << " "; cout << i; first = false; } } cout << endl; return 0; } ``` ## ⚙️ 关键点说明 - **`cnt[101] = {0}`**:初始化所有元素为0,数组下标即代表数字本身。 - **遍历范围**:因为数字范围固定0~100,直接遍历整个数组即可,无需额外排序。 - **空格处理**:使用 `bool first` 确保输出格式正确,不产生多余空格。 - **时间复杂度**:`O(n + 101)`,输入n次,遍历固定101次,高效且极快。 ## 🔧 开发建议 1. **边界考虑**:题目中n>1,且数字为0~100整数,因此 `cnt` 大小设为101是安全的,无需动态分配。 2. **代码可扩展性**:若数字范围变大(如0~10^6),则此方法不再适用,应考虑使用 `set` 或 `unordered_set` 加排序。 3. **内存优化**:当前使用固定数组,内存极小,完全满足题目100MB限制。 4. **输入输出优化**:对于大规模输入,可加入 `ios::sync_with_stdio(false); cin.tie(0);` 提升速度,但本题n<1000无需担心。 ######[AI写代码神器 | 574点数解答 | 2026-08-21 21:22:44]

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