第九周学习笔记 动态规划 不同路径2状态转移方程 //i,j > 0 dp[i][j] = obstacleGrid[i][j] == 1 ? 0 : dp[i – 1][j] + dp[i][j – 1]; 字符串算法 1.字符串操作问题 2.异位… 阅读全文
标签: 算法和数据结构
算法训练营第八周 位运算/布隆过滤器/LRU缓存/排序算法
第八周学习笔记 一、位运算 运算符及含义 运算符 含义 << 左移 >> 右移 >>> 无符号右移 & 按位与 | 按位或 ~ 按位取反 ^ 按位异或 位运算要点 •判断奇偶 x % 2 == 1 ——> (x & 1) == 1 x % 2 == 0 ——> (x & 1) == 0 •除以2 x >>… 阅读全文
算法训练营第七周 字典树/并查集/高级搜索/红黑树/AVL树
字典树 Trie 基本结构 字典树,即 Trie 树,又称单词查找树或键树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引 擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 基本性质 1.结点本身不存完整单词; 2.从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串; 3.每个结点的所有子结点路径代… 阅读全文
算法训练营第六周 动态规划
第六周学习笔记 动态规划 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。 动态规划和递归或者分治没有根本上的区别(关键看有无最优的子结构) 共性:找到重复子问题 差异性:最优子结构、中途可以淘汰次优解 关键点 1.最优子结构… 阅读全文
算法训练营第四周 DFS/BFS/贪心算法/二分查找
第四周学习笔记 深度优先搜索DFS 递归模板 visited = set() def dfs(node, visited): # terminator if node in visited: return visited.add(node) # process current node here. … for next_node in node.children(): if next_node… 阅读全文
算法训练营第三周 分治/递归/回溯
第三周学习笔记 递归 通过函数体来进行的循环 通过参数进行传递变量 Python递归模板: def recursion(level, param1, param2, …): #recursion terminator if level > MAX_LEVEL: process_result return #process logic current level process(level… 阅读全文
算法训练营第二周 哈希表/映射/集合/树/图/堆
第二周学习笔记 哈希表 是根据关键码值(Key value)而直接进行访问的数据结构。 元素 ==> 散列函数 ==> 存储位置 search/delete/insert时的时间复杂度可认为是O(1) HashMap key-value存储在Node[]数组中 static class Node<K,V> implements Map.Entry<K,V> { … 阅读全文
算法训练营第一周 数组 链表 跳表 栈 队列
第一周学习笔记 数组 Array 在内存中开辟出的一块连续空间 操作 复杂度 查找 O(1) 插入 O(n) 删除 O(n) prepend O(1) append O(1) 链表 Linked List 不要求连续存储空间,节点间通过指针连接 单链表 双向链表 循环链表 操作 复杂度 查找 O(n) 插入 O(1) 删除 O(1) prepend O(1) append O(1) 跳表 Skip… 阅读全文