数据结构
knightprin
fool
展开
-
子序列 子串的问题 --- Stupid subsequence & substring
总结一下这一系列的子序列,子串问题。原创 2020-04-10 10:40:58 · 93 阅读 · 0 评论 -
回溯法 常见题整理
回溯法,一般的思想是保存解,如果当前符合条件,就输出;如果不符合,就返回之前的状态。其实跟dfs是一个东西。经典的写法是建一个helper函数,保存数据信息。利用for循环查找每一次的值,然后进入下一个迭代过程;如果没有找到解的话,就把当前值pop出,进入下一次pop循环。Leetcode: 78 子集给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不...原创 2020-04-07 15:49:17 · 164 阅读 · 0 评论 -
LRU Leetcode 最近缓存机制
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据...原创 2020-04-06 12:47:04 · 116 阅读 · 0 评论 -
蓄水池抽样算法
蓄水池抽样算法,Reservoir Sampling.主要用来解决如下问题。给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出m个不重复的数据。来源于蓄水池.int[] reservoir = new int[m];// initfor (int i = 0; i < reservoir.lengt...转载 2020-03-30 18:10:21 · 194 阅读 · 0 评论 -
并查集
在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。可以确定哪个点属于哪个集群。这个blog写的很不错。cpp代码实现如下class UnionFindSet {public: int *parents_; int *ranks_; UnionFindSet(int n) { p...原创 2020-03-29 23:44:05 · 78 阅读 · 0 评论 -
单词接龙
leetcode 单词接龙,这个解法思路清晰,尽管超时了一部分。核心思想是BFS,每次找相邻的所有词,如果没有访问过,就加入队列,进入下一次的查找。(BFS)保证最短。class Solution{private: //计算两个单词之间的距离 int wordDist(const string& w1, const string &w2){ ...原创 2020-03-26 23:50:21 · 160 阅读 · 0 评论 -
快排 非栈与栈法
核心思想是利用两个指针,left和right,分别比较然后交换。注意一次快排结束后,哨兵点会在正确的位置,而左边都要小,右边都要大。随后递归。如果用栈法,就是要记录每次子数组的位置,直到栈为空。int quickSort(int a[], int start, int end){ int tmp = a[start]; if (start>end) return -1; ...原创 2020-03-25 15:51:05 · 150 阅读 · 0 评论 -
二叉树经典算法题整理
学而实习之。二叉树重建系列:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。思想:利用前序扫描,在中序中出现的点,左边是左子树而右边是右子树。利用递归法解决,class Solution { public: TreeNode *reConstructBinaryTree(vector<int>...原创 2020-03-22 18:31:47 · 821 阅读 · 0 评论 -
堆
堆-数组实现堆,利用完全二叉树的结构来维护一组数据。满二叉树: 除最后一层无任何子节点外,每一层的所有结点都有两个子节点的二叉树。也就是说每层节点数都达到最大值。完全二叉树: 最后一层的所有结点都连续集中在最左边。除此之外都使满的。最大堆,就是root是这棵树最大的值。优先级队列。c++中包含头文件KaTeX parse error: Expected 'EOF', got '#' at ...原创 2020-03-18 17:21:52 · 73 阅读 · 0 评论 -
散列表概念
@散列表hashtable,关键问题在于查找的时间优化和解决冲突。1. 直接寻址表index和key值直接相关,存储全域U2. 散列表即利用散列函数h由关键字k计算出槽的位置,采用函数h将全域U映射到散列表的槽位上。散列,顾名思义,希望h尽可能随机混杂,最大程度减少冲突。但由于h(k)的种数m<U, 所以一定会有冲突的情况产生。2.1 解决冲突的方法2.1.1 链接法在链接法...原创 2020-03-18 12:18:40 · 141 阅读 · 0 评论