mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-26 11:16:28 +08:00
build
This commit is contained in:
parent
365620ac22
commit
aae934ba24
10 changed files with 40 additions and 51 deletions
|
@ -102,8 +102,6 @@ comments: true
|
||||||
```javascript title=""
|
```javascript title=""
|
||||||
/* 链表节点类 */
|
/* 链表节点类 */
|
||||||
class ListNode {
|
class ListNode {
|
||||||
val;
|
|
||||||
next;
|
|
||||||
constructor(val, next) {
|
constructor(val, next) {
|
||||||
this.val = (val === undefined ? 0 : val); // 节点值
|
this.val = (val === undefined ? 0 : val); // 节点值
|
||||||
this.next = (next === undefined ? null : next); // 指向下一节点的引用
|
this.next = (next === undefined ? null : next); // 指向下一节点的引用
|
||||||
|
@ -1213,9 +1211,6 @@ comments: true
|
||||||
```javascript title=""
|
```javascript title=""
|
||||||
/* 双向链表节点类 */
|
/* 双向链表节点类 */
|
||||||
class ListNode {
|
class ListNode {
|
||||||
val;
|
|
||||||
next;
|
|
||||||
prev;
|
|
||||||
constructor(val, next, prev) {
|
constructor(val, next, prev) {
|
||||||
this.val = val === undefined ? 0 : val; // 节点值
|
this.val = val === undefined ? 0 : val; // 节点值
|
||||||
this.next = next === undefined ? null : next; // 指向后继节点的引用
|
this.next = next === undefined ? null : next; // 指向后继节点的引用
|
||||||
|
|
|
@ -6,7 +6,7 @@ comments: true
|
||||||
|
|
||||||
!!! question
|
!!! question
|
||||||
|
|
||||||
给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。
|
给定一个二叉树的前序遍历 `preorder` 和中序遍历 `inorder` ,请从中构建二叉树,返回二叉树的根节点。假设二叉树中没有值重复的节点。
|
||||||
|
|
||||||
![构建二叉树的示例数据](build_binary_tree_problem.assets/build_tree_example.png)
|
![构建二叉树的示例数据](build_binary_tree_problem.assets/build_tree_example.png)
|
||||||
|
|
||||||
|
@ -54,10 +54,10 @@ comments: true
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| | 根节点在 `preorder` 中的索引 | 子树在 `inorder` 中的索引区间 |
|
| | 根节点在 `preorder` 中的索引 | 子树在 `inorder` 中的索引区间 |
|
||||||
| ------ | -------------------------------- | ----------------------------- |
|
| ------ | ---------------------------- | ----------------------------- |
|
||||||
| 当前树 | $i$ | $[l, r]$ |
|
| 当前树 | $i$ | $[l, r]$ |
|
||||||
| 左子树 | $i + 1$ | $[l, m-1]$ |
|
| 左子树 | $i + 1$ | $[l, m-1]$ |
|
||||||
| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ |
|
| 右子树 | $i + 1 + (m - l)$ | $[m+1, r]$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -280,10 +280,7 @@ $$
|
||||||
} else {
|
} else {
|
||||||
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
||||||
dp[i][j] =
|
dp[i][j] =
|
||||||
Math.min(
|
Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1;
|
||||||
Math.min(dp[i][j - 1], dp[i - 1][j]),
|
|
||||||
dp[i - 1][j - 1]
|
|
||||||
) + 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,10 +314,7 @@ $$
|
||||||
} else {
|
} else {
|
||||||
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
||||||
dp[i][j] =
|
dp[i][j] =
|
||||||
Math.min(
|
Math.min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1;
|
||||||
Math.min(dp[i][j - 1], dp[i - 1][j]),
|
|
||||||
dp[i - 1][j - 1]
|
|
||||||
) + 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -724,7 +718,7 @@ $$
|
||||||
dp[j] = leftup;
|
dp[j] = leftup;
|
||||||
} else {
|
} else {
|
||||||
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
||||||
dp[j] = Math.min(Math.min(dp[j - 1], dp[j]), leftup) + 1;
|
dp[j] = Math.min(dp[j - 1], dp[j], leftup) + 1;
|
||||||
}
|
}
|
||||||
leftup = temp; // 更新为下一轮的 dp[i-1, j-1]
|
leftup = temp; // 更新为下一轮的 dp[i-1, j-1]
|
||||||
}
|
}
|
||||||
|
@ -758,7 +752,7 @@ $$
|
||||||
dp[j] = leftup;
|
dp[j] = leftup;
|
||||||
} else {
|
} else {
|
||||||
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
// 最少编辑步数 = 插入、删除、替换这三种操作的最少编辑步数 + 1
|
||||||
dp[j] = Math.min(Math.min(dp[j - 1], dp[j]), leftup) + 1;
|
dp[j] = Math.min(dp[j - 1], dp[j], leftup) + 1;
|
||||||
}
|
}
|
||||||
leftup = temp; // 更新为下一轮的 dp[i-1, j-1]
|
leftup = temp; // 更新为下一轮的 dp[i-1, j-1]
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,10 +94,10 @@ $$
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| | 顶点 | 边 | 图计算问题 |
|
| | 顶点 | 边 | 图计算问题 |
|
||||||
| ------ | ---- | --------------- | ------------ |
|
| -------- | ---- | -------------------- | ------------ |
|
||||||
| 社交网络 | 用户 | 好友关系 | 潜在好友推荐 |
|
| 社交网络 | 用户 | 好友关系 | 潜在好友推荐 |
|
||||||
| 地铁线路 | 站点 | 站点间的连通性 | 最短路线推荐 |
|
| 地铁线路 | 站点 | 站点间的连通性 | 最短路线推荐 |
|
||||||
| 太阳系 | 星体 | 星体间的万有引力作用 | 行星轨道计算 |
|
| 太阳系 | 星体 | 星体间的万有引力作用 | 行星轨道计算 |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -31,13 +31,13 @@ comments: true
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法名 | 描述 | 时间复杂度 |
|
| 方法名 | 描述 | 时间复杂度 |
|
||||||
| --------- | ------------------------------------------ | ----------- |
|
| --------- | -------------------------------------------- | ----------- |
|
||||||
| push() | 元素入堆 | $O(\log n)$ |
|
| push() | 元素入堆 | $O(\log n)$ |
|
||||||
| pop() | 堆顶元素出堆 | $O(\log n)$ |
|
| pop() | 堆顶元素出堆 | $O(\log n)$ |
|
||||||
| peek() | 访问堆顶元素(大 / 小顶堆分别为最大 / 小值) | $O(1)$ |
|
| peek() | 访问堆顶元素(大 / 小顶堆分别为最大 / 小值) | $O(1)$ |
|
||||||
| size() | 获取堆的元素数量 | $O(1)$ |
|
| size() | 获取堆的元素数量 | $O(1)$ |
|
||||||
| isEmpty() | 判断堆是否为空 | $O(1)$ |
|
| isEmpty() | 判断堆是否为空 | $O(1)$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ comments: true
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 数据结构与算法 | 拼装积木 |
|
| 数据结构与算法 | 拼装积木 |
|
||||||
| -------------- | ---------------------------------------- |
|
| -------------- | ---------------------------------------- |
|
||||||
| 输入数据 | 未拼装的积木 |
|
| 输入数据 | 未拼装的积木 |
|
||||||
| 数据结构 | 积木组织形式,包括形状、大小、连接方式等 |
|
| 数据结构 | 积木组织形式,包括形状、大小、连接方式等 |
|
||||||
|
|
|
@ -18,10 +18,10 @@ comments: true
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法名 | 描述 | 时间复杂度 |
|
| 方法名 | 描述 | 时间复杂度 |
|
||||||
| ----------- | -------------- | ---------- |
|
| ----------- | ---------------- | ---------- |
|
||||||
| pushFirst() | 将元素添加至队首 | $O(1)$ |
|
| pushFirst() | 将元素添加至队首 | $O(1)$ |
|
||||||
| pushLast() | 将元素添加至队尾 | $O(1)$ |
|
| pushLast() | 将元素添加至队尾 | $O(1)$ |
|
||||||
| popFirst() | 删除队首元素 | $O(1)$ |
|
| popFirst() | 删除队首元素 | $O(1)$ |
|
||||||
| popLast() | 删除队尾元素 | $O(1)$ |
|
| popLast() | 删除队尾元素 | $O(1)$ |
|
||||||
| peekFirst() | 访问队首元素 | $O(1)$ |
|
| peekFirst() | 访问队首元素 | $O(1)$ |
|
||||||
|
|
|
@ -20,11 +20,11 @@ comments: true
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法名 | 描述 | 时间复杂度 |
|
| 方法名 | 描述 | 时间复杂度 |
|
||||||
| --------- | -------------------------- | -------- |
|
| ------ | ---------------------------- | ---------- |
|
||||||
| push() | 元素入队,即将元素添加至队尾 | $O(1)$ |
|
| push() | 元素入队,即将元素添加至队尾 | $O(1)$ |
|
||||||
| pop() | 队首元素出队 | $O(1)$ |
|
| pop() | 队首元素出队 | $O(1)$ |
|
||||||
| peek() | 访问队首元素 | $O(1)$ |
|
| peek() | 访问队首元素 | $O(1)$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -22,11 +22,11 @@ comments: true
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 方法 | 描述 | 时间复杂度 |
|
| 方法 | 描述 | 时间复杂度 |
|
||||||
| --------- | ---------------------- | ---------- |
|
| ------ | ---------------------- | ---------- |
|
||||||
| push() | 元素入栈(添加至栈顶) | $O(1)$ |
|
| push() | 元素入栈(添加至栈顶) | $O(1)$ |
|
||||||
| pop() | 栈顶元素出栈 | $O(1)$ |
|
| pop() | 栈顶元素出栈 | $O(1)$ |
|
||||||
| peek() | 访问栈顶元素 | $O(1)$ |
|
| peek() | 访问栈顶元素 | $O(1)$ |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1119,12 +1119,12 @@ AVL 树的特点在于“旋转”操作,它能够在不影响二叉树的中
|
||||||
|
|
||||||
<div class="center-table" markdown>
|
<div class="center-table" markdown>
|
||||||
|
|
||||||
| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 |
|
| 失衡节点的平衡因子 | 子节点的平衡因子 | 应采用的旋转方法 |
|
||||||
| ---------------- | ---------------- | ---------------- |
|
| ------------------- | ---------------- | ---------------- |
|
||||||
| $> 1$ (即左偏树) | $\geq 0$ | 右旋 |
|
| $> 1$ (即左偏树) | $\geq 0$ | 右旋 |
|
||||||
| $> 1$ (即左偏树) | $<0$ | 先左旋后右旋 |
|
| $> 1$ (即左偏树) | $<0$ | 先左旋后右旋 |
|
||||||
| $< -1$ (即右偏树) | $\leq 0$ | 左旋 |
|
| $< -1$ (即右偏树) | $\leq 0$ | 左旋 |
|
||||||
| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 |
|
| $< -1$ (即右偏树) | $>0$ | 先右旋后左旋 |
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue