JavaScript-Algorithms
JavaScript-Algorithms copied to clipboard
基础理论+JS框架应用+实践,从0到1构建整个前端算法体系
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 **示例:** ```js 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 ``` 附leetcode地址:[leetcode](https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/tu-jie-leetcodehe-bing-liang-ge-you-xu-lian-biao-b/)
字节算法题:扑克牌问题
魔术师手中有一堆扑克牌,观众不知道它的顺序,接下来魔术师: - 从牌顶拿出一张牌, 放到桌子上 - 再从牌顶拿一张牌, 放在手上牌的底部 如此往复(不断重复以上两步),直到魔术师手上的牌全部都放到了桌子上。 此时,桌子上的牌顺序为: (牌顶) 1,2,3,4,5,6,7,8,9,10,11,12,13 (牌底)。 问:原来魔术师手上牌的顺序,用函数实现。
给定一个非空的整数数组,返回其中出现频率前 **k** 高的元素。 **示例 1:** ```js 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] ``` **示例 2:** ```js 输入: nums = [1], k = 1 输出: [1] ``` **提示:**...
给出由小写字母组成的字符串 `S` ,**重复项删除操作** 会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 **示例:** ```js 输入:"abbaca" 输出:"ca" 解释: 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。 ``` **提示:** 1. `
在字符串 `s` 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 `s` 只包含小写字母。 **示例:** ```js s = "abaccdeff" 返回 "b" s = "" 返回 " " ``` **限制:** `0
原题 : [编写一个算法解析以下符号,转换为json树的结构](https://www.pzijun.cn/algorithms/code/22.html) ```TS class TNode { name: string children?: TNode[] constructor(name: string, children?: TNode[]) { this.name = name this.children = children } } // 编写一个算法解析以下符号,转换为json树的结构 const str = ``...
给定一个二叉树,返回它的 **后序** 遍历。 **示例:** ```js 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] ``` 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 附赠leetcode地址:[leetcode](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/javascriptjie-er-cha-shu-de-hou-xu-bian-li-by-user/)
九大排序算法
## 14.1 冒泡排序 **原理:** 从左到右,相邻元素进行比较,如果前一个元素值大于后一个元素值(正序),则交换,这样一轮下来,将最大的数在最右边冒泡出来。这样一轮一轮下来,最后实现从小到大排序。 **动图演示:**  **代码实现:** ```js function bubbleSort(arr) { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length...
### 一、二叉查找树(BST树) 有的笔者也称它为二叉搜索树,都是一个意思。 二叉树本身没有多大的意义,直到有位大佬提出一个 trick。 如果我们规定一颗二叉树上的元素拥有顺序,所有比它小的元素在它的左子树,比它大的元素在它的右子树,那么我们不就可以很快地查找某个元素了吗? 不得不说这是一个非常天才的想法,于是,二叉查找树诞生了。 所以,二叉查找树与二叉树不同的是,它在二叉树的基础上,增加了对二叉树上节点存储位置的限制:二叉搜索树上的每个节点都需要满足: - 左子节点值小于该节点值 - 右子节点值大于等于该节点值  在二叉树中,所有子节点值都是没有固定规律的,所以使用二叉树存储结构存储数据时,查找数据的时间复杂度为 O(n),因为它要查找每一个节点。 而使用二叉查找树就不同了,例如上图,我们如果要查找 6 ,先从根节点 10 比较,6 比 10 小,则查找左子树,再与 8 比较,6 比 8 小,继续查找 8 的左子树,也就是...