目的
- 熟悉新近学习的编程语言各种语法糖,最大化的精简代码。
- 复习基本数据结构和基本算法,提高代码效率。
- 训练持久力。
说明
掌握数据结构
- 数组与链表:单 / 双向链表
- 栈与队列
- 哈希表
- 堆:最大堆 / 最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树) / 后缀树
- ...
掌握基础算法
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
- ...
常用数据结构和方法
- 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;
}