记一次作死 —— 被 Leetcode 封禁

本文最初宣布于我的个人博客:品味之味

从昨天凌晨四点起,我的 Leetcode 账号就没法提交任何代码了,因而我认识到我的账号也许是被封了……

原由

我和我的同砚 @xidui 正在保护一个项目 xidui/algorithm-training。实在就是收录一些算法题的解答,现在重要对象就是 Leetcode。我头几天恰好做到 #17 Letter Combinations of a Phone Number。问题也蛮简朴的,我写好今后提交了一下,发明跑出来的效果是 152 ms —— “哇哦,你打败了 2.44% 的提交”。好差!!我霎时满脸黑线。而之前提到的项目中恰好有另一个同砚写的关于这一题的解答,我赶忙去参考了一下,觉得空间复杂度比我小许多,但时候复杂度应当差不多呀,然后解释中有这么一句:

I think this is an O(n^3) solution, but still runs faster than 100% submissions

不信邪的我把这位同砚的代码复制过来提交了一下,获得的效果是 —— 160ms…“哇哦,你打败了 2.44% 的提交哦!” ╮(╯_╰)╭

看了看 Discuss 里的解法,觉得复杂度好像也差不多,因而我决议研 (Zuo) 究 (Si) 一下 Leetcode OJ 效劳的稳固性怎样。

历程

翻开 Chrome 的开发者东西,发明只需 submitcheck 两种 ajax 要求,response 内容也许是如许的:

// `submit` response
{ "submission_id": 46823974 }

// first `check` response
{ "state": "STARTED" }

// second `check` response
{
  "lang": "javascript",
  "total_testcases": 25,
  "status_code": 10,
  "status_runtime": "152 ms",
  "run_success": true,
  "state": "SUCCESS",
  "total_correct": 25,
  "question_id": "17"
}

所以只需先模仿一个 submit 的 POST 要求,拿到 submission_id 后,再用这个 id 模仿 check 的 GET 要求,直到拿到终究的效果。

我直接把之前发送的两个 ajax 要求用 Curl 的情势保留下来:(谢谢 Chrome ╰( ̄▽ ̄)╮)

《记一次作死 —— 被 Leetcode 封禁》

然后我写了个 Nodejs 的小顺序,每隔一分钟挪用上面保留的两个脚原本举行一次提交,并把当次的实行速率保留到 Mongodb 中。代码我就不贴啦,有兴致的话能够到 zry656565/Leetcode-Benchmark 看看。

效果

这个顺序也许是在十一点摆布的时候最先运转的。本认为一分钟一次的频次并不高,效果第二天起来一看,从凌晨四点多最先就没有数据了,自此我这个账号就提交不了代码了。。

固然啦,收集到了 300 多条数据也不能白费了,画个图出来看看吧。恣意一个节点所提交的顺序片断都是同一个,也许终究的效果是如许的:

《记一次作死 —— 被 Leetcode 封禁》

(⊙o⊙)…原本想着是否是能找到某个 Leetcode 的效劳器轻微稳固一点的时候,不过好像并不存在如许的时候呢。呵呵,然并卵。不过好消息是,在事宜发作的二十四小时今后,我发明我的账号解禁了,哈哈哈哈。

完。

    原文作者:JerryZou
    原文地址: https://segmentfault.com/a/1190000004046234
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞