• LeetCode算法训练


    目的

    • 熟悉新近学习的编程语言各种语法糖,最大化的精简代码。
    • 复习基本数据结构和基本算法,提高代码效率。
    • 训练持久力。

    说明

    掌握数据结构

    • 数组与链表:单 / 双向链表
    • 栈与队列
    • 哈希表
    • 堆:最大堆 / 最小堆
    • 树与图:最近公共祖先、并查集
    • 字符串:前缀树(字典树) / 后缀树
    • ...

    掌握基础算法

    • 基础技巧:分治、二分、贪心
    • 排序算法:快速排序、归并排序、计数排序
    • 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
    • 图论:最短路径、最小生成树
    • 动态规划:背包问题、最长子序列
    • ...

    常用数据结构和方法

    • LeetCode提供的样本输入,显示上是数组Array,而后台的实际测试用例则是树TreeNode,链表ListNode等。
    • 如果你是在页面手撸代码直接提交的,那没什么影响。
    • 如果你是在本地IDE编写的代码,你就需要把样本输入拷贝下来,转换成相应的数据类型,再编写核心算法进行测试。
    • 我们只需要提交核心算法,不需要提交测试数据初始化代码。
    • ...

    ListNode

    function ListNode(val) {
        this.val = val;
        this.next = null;
    }
    

    arrayToListNode

    /**
     * @param {number[]} arr
     * @return {ListNode}
     */
    function arrayToListNode(arr) {
        if (arr.length === 0) return null;
        let root = new ListNode(arr.shift());
        root.next = arrayToListNode(arr);
        return root;
    }
    

    arrayToListNodeArray

    /**
     * @param {number[][]} arr
     * @return {ListNode[]}
     */
    function arrayToListNodeArray(arr) {
        let result = [];
        for (let a of arr) {
            let dummy = new ListNode();
            let head = dummy;
            for (let i of a) {
                dummy.next = new ListNode(i);
                dummy = dummy.next;
            }
            result.push(head.next);
        }
        return result;
    }
    
  • 相关阅读:
    json
    mybatis 一对一关联对象查询
    下拉框多级联动
    时间轴和操作元素属性
    上传
    多选框获取和全选
    字符串操作,截取最后一个逗号
    idea快捷键使用
    获取下拉框的文本和值,下拉框默认选中
    toString()函数分析
  • 原文地址:https://www.cnblogs.com/zenronphy/p/LeetCodeTrainingBase.html
Copyright © 2020-2023  润新知