一招教你给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提速了也还是给人家吊打了。

你可能感兴趣的:(算法)