为什么下面的代码片段会加快代码速度
Why does the following snippet speed up the code?
我正在解决LeetCode上的搜索插入位置问题。以下代码运行所有测试用例几乎需要 9 毫秒。
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int lo = 0, hi = nums.size() - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (target < nums[mid]) {
hi = mid - 1;
} else if (target > nums[mid]){
lo = mid + 1;
} else {
return mid;
}
}
return lo;
}
};
当我查看其他人的热门答案时,我发现了一个奇怪的代码片段。当我将代码片段复制粘贴到我的答案中时,上面的相同代码只需要 4 毫秒,这比几乎 99% 的其他解决方案都要快。谁能解释一下速度?代码段如下:
#include <vector>
#include <iostream>
using namespace std;
static vector<int> nums=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return vector<int>{};
}();
此代码段旨在"提高性能",但需要付费。我将解释:
std::ios::sync_with_stdio(false);
这将禁用 C 和 C++ 标准流的同步。默认情况下,它们是同步的,以允许混合 C 和 C++ I/O 流(例如,cout 和 printf 可以在C++文件中写入(。
cin.tie(NULL);
这解开了cin from cout。同样,默认情况下,它们被绑定为使 cout 出现在 cin 之前(即输出在输入之前刷新(,因此您可以执行以下操作:
cout << "Number: ";
cin >> number;
当您解开它们时,您可能会在刷新输出 (cout( 之前到达输入 (cin(。
这几行有助于使代码运行得更快,但代价是前面解释的。因此,请谨慎使用。
参考资料: https://www.geeksforgeeks.org/fast-io-for-competitive-programming
相关文章:
- 使用"静态"如何影响我的代码速度?
- 加快一个长python代码的速度,因为只有一个块,所以速度很慢
- 将浮点数转换为字符串时如何加快此代码的速度?
- 为什么 pthread 会减慢代码速度?
- cudaMemcpyToSymbol只是挂起,永远不会返回.GPU 处理速度为 100%.代码在 K40 上工作正常,但
- 使用额外的变量使计算更容易理解 - (多少)我减慢了代码的速度?
- 与Java相比,为什么此C 代码执行速度如此慢
- 通过创建单个线程来运行一段代码可加快执行速度
- 代码执行/CPU 速度每 2 秒减慢一次
- 为什么下面的代码片段会加快代码速度
- 为什么这段代码在 C++ 中搜索子字符串的速度比在 C# 中慢得多
- 因为一行不相关的代码,速度相差那么大
- 添加print语句可以将代码的速度提高一个数量级
- 大括号的作用域是否用于注释目的,从而降低C++代码的速度
- 矩阵乘法代码使用avx2速度较慢
- 如果我用代码块编译代码,为什么我的代码运行速度更快
- 跟踪gcc编译以及哪些代码会减慢编译速度
- 可能的代码速度优化
- 如何在VS 2008中提高代码速度
- Java的JITter如何影响测量代码速度?