如何优化统计数组和、奇偶数量的C++代码,获得执行时间更短的算法?
问题解答
1 现有代码的优化方案
现有代码存在明显的优化空间,优化后可以有效减少执行时间,核心思路是减少不必要操作、提升IO效率,优化后的代码如下:
#include <iostream> using namespace std; int main() { // 关闭同步、解绑流提升IO速度 ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; long long sum = 0; int odd_cnt = 0, even_cnt = 0; // 边读边计算,无需存储全部元素 for (int i = 0; i < n; ++i) { int x; cin >> x; sum += x; // 位运算判断奇偶效率高于取模 odd_cnt += (x & 1); } even_cnt = n - odd_cnt; cout << sum << " " << odd_cnt << " " << even_cnt << "\n"; return 0; }
主要优化点如下:
- 取消数组存储:不需要把所有输入元素缓存下来,边读取边计算即可,省去动态数组的内存开销,同时把原代码的两次遍历合并为一次,减少循环执行开销
- 加速输入输出:关闭cin和C标准IO的同步、解绑cin和cout,在输入量达到1e5量级时,IO速度能提升数倍
- 奇偶统计优化:用位运算
x & 1替代取模运算x % 2判断奇偶,位运算执行效率更高;同时偶数个数可以直接用总个数减奇数个数得到,省去分支判断 - 避免无效内存操作:取消了动态数组申请,也就避免了原代码未释放数组带来的内存泄漏风险
2 代码优化方法的获取渠道
你可以通过以下几个渠道系统学习代码优化相关知识:
- 编程语言、编译器官方文档:官方会明确给出语言特性的性能差异、编译器内置的优化规则和使用建议
- 专业技术书籍:比如《深入理解计算机系统》可以帮你理解程序底层运行逻辑,《算法导论》讲解算法复杂度优化思路,对应编程语言的性能优化专项书籍会给出具体语言的落地优化技巧
- 编程竞赛相关内容:各类算法竞赛的经验分享、常见题型的实现方案中,会有大量针对执行速度、内存占用的实用优化技巧
- 性能调试工具实践:通过perf、gprof、VS性能分析器等工具实测代码运行瓶颈,针对性调整的经验积累是最有效的优化学习路径
- 行业技术分享:大厂技术团队公开的性能优化实践案例、线下技术沙龙的相关分享,也能获取到大量落地性强的优化经验
内容的提问来源于stack exchange,提问作者golden_hacker
相关产品推荐
相关产品推荐

