线段树(Segment Tree)是一种二叉搜索树,与区间树相似,他将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶子节点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为 O(logN)。而未优化的空间复杂度为 2N ,实际应用时一般还要开 4N 的数组以免越界,因此有时需要离散化让空间压缩。 —— 百度百科* 线段树可以使用一个堆来表示,存储在长度为 2N… 阅读全文
分类: 算法
树状数组 —— 一种支持单点修改和区间查找的数据结构
树状数组(英语:Binary Indexed Tree)又称为二元索引树,由 Fenwick 于 1994年发明,故又称为 Fenwick 树,其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和、区间和。它支持在 O(logn) 的时间复杂度内得到任意前缀和和区间和,同时支持在 O(logn) 的时间复杂度内动态修改单点的值,空间复… 阅读全文
算法训练营第九周 高级动态规划/字符串算法
第九周学习笔记 动态规划 不同路径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… 阅读全文