![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
四灵妖
这个作者很懒,什么都没留下…
展开
-
回溯算法--全排列
const permute = (nums) => { const res = []; const used = {}; dfs([]); function dfs(path) { if (path.length == nums.length) { res.push(path.slice()); return; } for (const num of nums) { // if (path.includes(num)) con原创 2020-10-18 19:53:44 · 79 阅读 · 0 评论 -
leetcode236二叉树中最近的公共祖先
最近公共祖先的定义: 设节点 rootroot 为节点 p, qp,q 的某公共祖先,若其左子节点 root.leftroot.left 和右子节点 root.rightroot.right 都不是 p,qp,q 的公共祖先,则称 rootroot 是 “最近的公共祖先” 。根据以上定义,若 rootroot 是 p, qp,q 的 最近公共祖先 ,则只可能为以下情况之一:p 和 qq在 root 的子树中,且分列 root 的 异侧(即分别在左、右子树中);p = root ,且 q 在 root原创 2020-10-13 21:54:34 · 132 阅读 · 0 评论 -
动态规划
动态规划利⽤历史记录,来避免我们的重复计算。⽽这些历史记录,我们得需要⼀些变量来保存,⼀般是⽤⼀维数组或者⼆维数组来保存。第⼀步骤:定义数组元素的含义,就是规定你这个数组元素的含义,例如你的 dp[i] 是代表什么意思?第⼆步骤:找出数组元素之间的关系式,有⼀点类似于我们⾼中学习时的归纳法的,当我们要计算 dp[n] 时,是可以利⽤ dp[n-1],dp[n-2]…dp[1],来推出 dp[n] 的,也就是可以利⽤历史数据来推出新的元素值,所以我们要找出数组元素之间的关系式。第三步骤:找出初始值。即使原创 2020-08-31 18:20:36 · 77 阅读 · 0 评论 -
BFS和DFS的JS实现
1.DFS 与 BFS 的特点比较:BFS 的应用一:层序遍历乍一看来,这个遍历顺序和 BFS 是一样的,我们可以直接用 BFS 得出层序遍历结果。然而,层序遍历要求的输入结果和 BFS 是不同的。层序遍历要求我们区分每一层,也就是返回一个二维数组。而 BFS 的遍历结果是一个一维数组,无法区分每一层。所以要在bfs的基础上,在每一层遍历开始前,先记录队列中的结点数量 n也就是这一层的结点数量),新创建一个数组level,将n个节点的值push进去,然后循环遍历n个节点,分别将节点的左右节点原创 2020-08-31 16:26:40 · 855 阅读 · 0 评论 -
数据结构--排序和查询
排序:1.选择排序: /** * 交换数组两个下标的数据 * @param {*} arr * @param {*} i1 * @param {*} i2 */ function swap(arr,i1,i2){ var temp=arr[i1]; arr[i1]=arr[i2]; arr[i2]=temp; } function selectionSort(arr){原创 2020-07-26 17:12:50 · 184 阅读 · 0 评论 -
链表类题目分析
一:递推法递推阶段: 每次传入 head.next ,以 head == null(即走过链表尾部节点)为递归终止条件,此时直接返回。回溯阶段: 层层回溯时,将当前节点值加入列表,即tmp.push(head.val),最终返回tmp.执行时,相当于函数调用函数,函数调用函数,…,直到触发终止条件。回溯(即返回时),前面的那些函数才算“执行完毕”,才可以执行下面的 tmp.add(head.val),从最后面一个节点开始依次回溯push。function reversePrint(head) {.原创 2020-07-25 17:54:06 · 129 阅读 · 0 评论 -
算法--线性结构--链表
递归(recursion)是函数式编程思想的产物,它使用数学函数的思想进行运算,只要在数学逻辑上是合理的,即代码中的函数一定合理。使用递归时,无须深究其运行过程!斐波拉契数列的特点是:第1位和第2位固定为1,后面的位,其数字等于前两位之和,比如: [1, 1, 2, 3, 5, 8, 13, 21, …]求斐波拉契数列第n位的值,n>0如果使用函数f(n)来表示斐波拉契数列第n位的值,通过数学分析,可以轻松得到:f(1) = 1f(2) = 1f(n) = f(n-1) + f(n-2)原创 2020-07-25 00:49:02 · 207 阅读 · 0 评论