随笔分类 - JS数据结构和算法
摘要:动态规划 算法设计的一种思想 将问题分解为==相互重叠==的子问题,对子问题进行求解,从而解决原问题 1. 动态规划和分治 区别 分治的子问题,==相互独立==,互不干扰 动态规划的子问题==相互重叠== 如斐波那契求和:f(n)=f(n-1)+f(n-2):f(n-1) 和f(n-2) 之间是不是
阅读全文
摘要:LeetCode 133. 克隆图 给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。 class Node { public int val; public List<Node> neighb
阅读全文
摘要:分治 算法设计的一种方法 将一个问题分成和原问题相似的小问题,递归解决,再将结果合并为原来的问题 场景 归并排序 快速排序 二分查找 LeetCode 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root = [4,2,7,1,3,6
阅读全文
摘要:回溯算法 算法设计的一种思想 渐进式寻找解决问题的方法 从一个可能的动作开始解决问题,如果改动作不行,就回溯到最初的状态,选择另一种动作解决问题 LeetCode 46. 全排列 难度中等2249收藏分享切换为英文接收动态反馈 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可
阅读全文
摘要:排序 1. 冒泡排序 1. 对于一个数组,比较所有的相邻的元素,如果第一个大于第二个,则交换 2. 比较一轮下来,可以保证一个元素是有序的 3. 在比较n-1 轮,整个数组就排序好了 代码实现 // 将排序算法挂载到原型链上 Array.prototype.bubbleSort = function
阅读全文
摘要:贪心算法 算法设计思想 期盼通过每个阶段的最优,来达到全局的最优 结果并不一定是最优的 LeetCode 455. 分发饼干 难度简单582收藏分享切换为英文接收动态反馈 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i]
阅读全文
摘要:图 一个二元关系 图的表示法 邻接矩阵 邻接表 图的遍历 深度优先搜索 访问根节点(开始节点) 循环访问没有访问过的邻接节点(递归,新节点跳回第一步) 广度优先搜索 维护一个队列 节点入队(第一次开始节点) 节点出队并访问,把当前节点没有访问过的邻接节点入队(循环第三步,直到队列为空) LeetCo
阅读全文