记leetcode中提高运行速度的奇技淫巧与其计时不准确性

在看leetcode中别人的代码时,发现了一段奇怪的东西:

static auto x = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    return 0;
}();

这是什么玩意儿?
里面sync那句是解除cin与stdin的同步,加快读入数据的。tie(0)那句是解除cin与cout的绑定,避免每个<<都要flush。

至于x,大括号那句是一个lambda函数,所以x实质上是一个返回值为int的函数。后面跟的括号代表了这个函数是直接执行的。造成的效果就是这几句代码会先于main函数执行,可以在答案函数之外对输入输出流生效。

不过轮子哥说这样做可能会影响stl的初始化。至于用不用就见仁见智啦。

至于leetcode的计时,就相当不准确了。例如题852. 山脉数组的峰顶索引,我的代码如下:

static auto x = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    return 0;
}();

class Solution {
public:
    int peakIndexInMountainArray(vector<int>& A) {
        auto high=max_element(A.begin(),A.end());
        return high-A.begin();
    }
};

同样的代码,运行时间由4mm到28mm,从战胜了100%的人到战胜了5%的人。可能是测试用例少的情况下会这样吧,数据量大起来可能不同算法、写法区分度会高些。

参考
https://www.zhihu.com/question/282092403
http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.html

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
打开leetcode很卡 Leetcode | 算法刷题 算法学习: 由于Leetcode题量大,内容多,复习难度大,学习掌握算法的情况也不是很好。 从8.28开始转刷剑指offer,一共67道题目,其简单题7道,等难度题31道,较难题26道,困难题3道 1: 简单题和等难度题(共38道题目) 2: 最优解,做笔 3: 每天2道,隔天复习(即每天4道题) 4: Python 每日打卡: 8月: 28:1⃣剑指offer刷题 29:1⃣剑指offer刷题 30:1⃣剑指offer刷题2⃣博客网站布局搭建完毕 8月 28 29 30 31 . . . 1h练字/阅读 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 2+2算法题 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 博客网站 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 毕业课题 :cross_mark: :cross_mark: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 认真投入学习 9月第一周 1 2 3 4 5 6 7 1h练字/阅读 :check_box_with_check: :check_box_with_check: :cross_mark: :check_box_with_check: - - - 2+2算法题 :check_box_with_check: :check_box_with_check: :cross_mark: :check_box_with_check: - - - 博客网站 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 毕业课题 :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: 1号:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值