⑮ 算法设计思想之“回溯算法”
摘要:一、理论 1. 简介 回溯算法是 算法设计 中的一种方法 回溯算法是一种 渐进式 寻找并构建问题解决方法的策略 回溯算法会先从一个可能的动作开始解决问题,如果不行就回溯并选择另一个动作,直到将问题解决 2. 什么问题适合用回溯算法解决? 有很多路 这些路里,有 死路, 也有 出路 通常需要递归来模拟
阅读全文
posted @
2022-02-10 16:28
pleaseAnswer
阅读(73)
推荐(0) 编辑
⑭ 算法设计思想之“贪心算法”
摘要:一、理论 1. 简介 贪心算法是 算法设计 中的一种方法 期盼通过每个阶段的 局部最优 选择从而达到全局的最优 结果并 不一定是最优 2. 零钱兑换 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 输入: coins = [1,
阅读全文
posted @
2022-02-10 16:27
pleaseAnswer
阅读(108)
推荐(0) 编辑
⑬ 算法设计思想之“动态规划”
摘要:一、理论 1. 简介 动态规划是 算法设计 中的一种方法 它将一个问题分解成 相互重叠 的子问题, 通过反复求解子问题,来解决原来的问题 2. 斐波那契数列 定义子问题:F(n) = F(n-1) + F(n-2) 反复执行:从2循环到n,执行上述公式 3. 动态规划 VS 分而治之 关键区别 典例
阅读全文
posted @
2022-02-10 16:26
pleaseAnswer
阅读(58)
推荐(0) 编辑
⑫ 算法设计思想之“分而治之”
摘要:一、理论 1. 简介 分而治之是 算法设计 中的一种方法 它将一个问题 分 成多个和原问题相似的小问题, 递归解决 小问题,再将结果 合 并以解决原来的问题 2. 场景 2.1 归并排序 分:把数组从中间一分为二 解:递归地对两个子数组进行归并排序 合:合并有序子数组 2.2 快速排序 分:选基准,
阅读全文
posted @
2022-01-28 15:36
pleaseAnswer
阅读(100)
推荐(0) 编辑
⑪ 进阶算法之“搜索算法”
摘要:一、理论 1. 排序和搜索简介 排序:把某个乱序的数组变成升序或降序数组 搜索:找出数组中某个元素的下标 1.1 js中的排序和搜索 js中的排序:sort() js中的搜索:indexOf() 1.2 排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序 1.3 搜索算法 顺序搜索 二分搜索
阅读全文
posted @
2022-01-27 15:22
pleaseAnswer
阅读(48)
推荐(0) 编辑
⑩ 数据结构之“堆”
摘要:一、理论 1. 堆简介 堆是一种特殊的 完全二叉树 所有的节点都大于等于(最大堆)或小于等于(最小堆)它的子节点 1.1 js中的堆 js中通常用数组表示堆 左侧子节点的位置是 2*index+1 右侧子节点的位置是 2*index+2 父节点位置是(index-1)/2 1.2 应用 堆能高效、快
阅读全文
posted @
2022-01-26 17:44
pleaseAnswer
阅读(117)
推荐(0) 编辑
⑨ 数据结构之“图”
摘要:一、理论 1. 图简介 图是 网络结构 的抽象模型,是一组由 边 连接的 节点 图可以表示任何二元关系 js中没有图,但可以用Object和Array构建图 图的表示法:邻接矩阵、邻接表、关联矩阵... 2. 图的表示法 2.1 邻接矩阵 2.2 邻接表 const graph = { 0: [1,
阅读全文
posted @
2022-01-26 14:37
pleaseAnswer
阅读(66)
推荐(0) 编辑
⑧ 数据结构之“树”
摘要:一、理论 1. 树简介 树是一种 分层 数据的抽象模型 常见树:DOM树、级联选择、树形控件... js中没有树,但可以用Object和Array构建树 树的常用操作:深度/广度优先遍历、先中后序遍历 2. 深度/广度优先遍历 const tree = { val: 'a', children: [
阅读全文
posted @
2022-01-20 15:17
pleaseAnswer
阅读(75)
推荐(0) 编辑
⑦ 数据结构之“字典”
摘要:一、 理论 1. 字典简介 与集合类似,字典也是一种存储唯一值的数据结构,是以 键值对 的形式存储的 es6中有字典Map 1.1 增 const m = new Map() m.set('a', 'aa') m.set('b', 'bb') 1.2 删 m.delete('b') m.clear(
阅读全文
posted @
2022-01-20 15:14
pleaseAnswer
阅读(207)
推荐(0) 编辑
⑥ 数据结构之“集合”
摘要:一、 理论 1. 集合简介 一种 无序且唯一 的数据结构 es6中有集合Set 集合的常用操作:去重、判断某元素是否在集合中、求交集 1.1 去重 // set const arr = [1, 1, 2, 2] const arr2 = [...new Set(arr)] 1.2 判断元素是否在集合
阅读全文
posted @
2022-01-18 11:59
pleaseAnswer
阅读(84)
推荐(0) 编辑
⑤ 数据结构之“链表”
摘要:function ListNode(val, next) { this.val = (val undefined ? 0 : val) this.next = (next undefined ? null : next) } 一、 理论 1. 链表简介 多个元素组成的列表 元素存储不连续,用next
阅读全文
posted @
2022-01-18 10:38
pleaseAnswer
阅读(62)
推荐(0) 编辑
④ 数据结构之“队列”
摘要:一、 理论 1. 队列简介 一个 先进先出 的数据结构 js中没有队列,但可以用Array实现队列的所有功能 // queue const queue = [] queue.push(1) queue.push(2) let item1 = queue.shift() let item2 = que
阅读全文
posted @
2022-01-18 09:56
pleaseAnswer
阅读(16)
推荐(0) 编辑
③ 数据结构之“栈”
摘要:一、 理论 1. 栈简介 一个 先进后出 的数据结构 js中没有栈,但可以用Array实现队列的所有功能 // stack const stack = [] stack.push(1) stack.push(2) const item1 = stack.pop() const item2 = sta
阅读全文
posted @
2022-01-18 09:55
pleaseAnswer
阅读(26)
推荐(0) 编辑
② 时间、空间复杂度计算
摘要:1. 时间复杂度计算 定性描述该算法的运行时间 O(1) let i = 0 i += 1 O(n) for(let i = 0; i < n; i++) { console.log(i) } O(1) + O(n) = O(n) let i = 0 i += 1 for(let i = 0; i
阅读全文
posted @
2022-01-18 09:53
pleaseAnswer
阅读(24)
推荐(0) 编辑
① 简介
摘要:1. 学习路线 1.1 理论 重点关注:数据结构与算法、应用场景、js实现、时间/空间复杂度 1.2 刷题 刷题网站:leetcode 刷题类型:按类型刷题 重点关注:通用套路、时间/空间复杂度分析和优化 1.3 实战 前端与数据结构/算法的结合点 在工作中与数据结构/算法打交道 2. 数据结构与算
阅读全文
posted @
2022-01-18 09:52
pleaseAnswer
阅读(22)
推荐(0) 编辑