一招教你给leetcode submission提速

今天在写leetcode上的Maximal Rectangle这一道题时,我发现一个人的8ms解答跟我的16ms解答方法是一样的,复杂度也是一样的,但是为啥他比我快了一倍呢?
我仔细查看他的代码,发现了这么一段:

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

这段代码利用了lambda表达式,在全局作用域定义并且立即执行。
执行的也就两句代码:

  • ios::sync_with_stdio(false)表示关闭std::cinstd::coutscanfprintf 的同步,这是什么意思呢?
    sync_with_stdio这个函数是一个是否兼容stdio的开关,是C++为了兼容C,保证程序在使用了std::printfstd::cout的时候不发生混乱,将输出流绑到了一起。
    这种兼容会影响C++的IO效率,是一种保守措施。
  • 至于cin.tie(NULL)这句代码,表示解除cincout之间的绑定,因为在默认情况下cin绑定的是cout,这样在每次执行<< 操作符的时候都要调用flush,会增加IO负担。解除这个绑定后可以解除大量flush调用,进一步提高IO效率。

而leetcode网站的测试案例也是通过IO来读取的,因此提高IO效率当然也会给我们的submission提速了。
但我们还是得努力思考出更高效的算法,不然就算给IO提速了也还是给人家吊打了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值