美文网首页升级之旅程序员工具癖
leetcode-cli: 体验不一样的刷题风 (4) 插件篇

leetcode-cli: 体验不一样的刷题风 (4) 插件篇

作者: skygragon | 来源:发表于2017-07-29 13:14 被阅读1169次

    leetcode-cli的功能在不断完善,同时也带来了一些实现上的问题:

    • 新功能的不断加入提高了代码逻辑的复杂度,容易出bug。
    • 不同功能的逻辑混在一起,难以理解和维护。
    • 部分功能不是所有人都需要,也不是对所有编程语言都适用。
    • 所有新功能的发布必须更新现有leetcode-cli的版本。

    就此在2.0.0版本中我们重构了现有代码,引入了插件机制来解决上面遇到的问题,其优势在于:

    • 可定制:用户可按照自己的喜好选择性安装某些插件。
    • 可扩展:新插件可以很容易的集成进来,即插即用,现有leetcode-cli版本几乎无需改动。
    • 可维护:每个插件实现为独立的js文件,逻辑清晰便于管理。

    https://github.com/skygragon/leetcode-cli-plugins 提供了一些可用的第三方插件,并在不断完善中。目前提供的插件有:

    company.js

    可按照公司来筛选题目列表,这些信息主要收集于网上相似的题目,比如lintcode, careercup等。

    $ leetcode list -q hL -t facebook
          [410] Split Array Largest Sum                                      Hard   (36.60 %)
        ✔ [301] Remove Invalid Parentheses                                   Hard   (35.03 %)
        ✔ [297] Serialize and Deserialize Binary Tree                        Hard   (33.12 %)
          [282] Expression Add Operators                                     Hard   (29.55 %)
          [273] Integer to English Words                                     Hard   (21.98 %)
          [218] The Skyline Problem                                          Hard   (27.00 %)
        ✔ [146] LRU Cache                                                    Hard   (17.53 %)
        ✔ [128] Longest Consecutive Sequence                                 Hard   (36.63 %)
        ✔ [ 85] Maximal Rectangle                                            Hard   (27.66 %)
        ✔ [ 76] Minimum Window Substring                                     Hard   (25.14 %)
        ✔ [ 68] Text Justification                                           Hard   (18.95 %)
        ✔ [ 57] Insert Interval                                              Hard   (27.46 %)
        ✔ [ 44] Wildcard Matching                                            Hard   (19.93 %)
        ✔ [ 25] Reverse Nodes in k-Group                                     Hard   (30.61 %)
        ✔ [ 23] Merge k Sorted Lists                                         Hard   (27.08 %)
        ✔ [ 10] Regular Expression Matching                                  Hard   (24.06 %)
    

    cpp.lint.js

    在线提交测试之前,先使用cpplint对c++代码进行静态分析。

    $ leetcode test 1.two-sum.cpp
    
    Input data:
    [3,2,4]
    6
    
    Running cpplint ...
    
    [ERROR] 1.two-sum.cpp:29:  public: should be indented +1 space inside class Solution  [whitespace/indent] [3]
    [ERROR] 1.two-sum.cpp:30:  Is this a non-const reference? If so, make const or use a pointer: vector<int>& nums  [runtime/references] [2]
    [ERROR] 1.two-sum.cpp:31:  Line ends in whitespace.  Consider deleting these extra spaces.  [whitespace/end_of_line] [4]
    [ERROR] 1.two-sum.cpp:31:  Redundant blank line at the start of a code block should be deleted.  [whitespace/blank_line] [2]
    [ERROR] 1.two-sum.cpp:31:  Redundant blank line at the end of a code block should be deleted.  [whitespace/blank_line] [3]
    

    cpp.run.js

    本地直接运行测试c++代码,便于本地一些简单的代码调试。不过仅限于部分题目,有些题目(比如系统设计类)需要构建额外的桩代码才能运行,有些得不偿失。

    $ leetcode test 001.two-sum.cpp --local
    
    Input data:
    [3,2,4]
    6
    
    Testing locally ...
    
    [1,2]
    

    solution.discuss

    显示在leetcode.com讨论区里点赞最多的解法。

    $ leetcode show 1 --solution
    
    Accepted C++ O(n) Solution
    
    https://discuss.leetcode.com/topic/3294/accepted-c-o-n-solution
    
    * Lang:  cpp
    * Votes: 221
    
    vector<int> twoSum(vector<int> &numbers, int target)
    {
        //Key is the number and value is its index in the vector.
        unordered_map<int, int> hash;
        vector<int> result;
        for (int i = 0; i < numbers.size(); i++) {
            int numberToFind = target - numbers[i];
    
                //if numberToFind is found in map, return them
            if (hash.find(numberToFind) != hash.end()) {
                        //+1 because indices are NOT zero based
                result.push_back(hash[numberToFind] + 1);
                result.push_back(i + 1);
                return result;
            }
    
                //number was not found. Put it in the map.
            hash[numbers[i]] = i;
        }
        return result;
    }
    

    传送门

    相关文章

      网友评论

      • 明明很安静:干嘛的这项目
        明明很安静:@明明很安静 命令行刷题?相比较于浏览器刷题有啥亮点?
      • JRTx:可以使用JAVA吗?还是只能提交cpp?
        傻傻木:测试代码时报这个错误,还需要额外的配置吗?
        Input data:
        [2,7,11,15]
        9
        [ERROR] http error [404]
        傻傻木:登录时一直失败,求大神帮忙解决。
        pass:
        [ERROR] invalid password? [0]
        skygragon:可以的,show -l java (https://skygragon.github.io/leetcode-cli/commands#show)或者配置文件改成默认使用java(https://skygragon.github.io/leetcode-cli/advanced#configuration)

      本文标题:leetcode-cli: 体验不一样的刷题风 (4) 插件篇

      本文链接:https://www.haomeiwen.com/subject/rnaqlxtx.html