随笔分类 - 数据结构
摘要:2020-03-18 20:45:47 问题描述: 两个二进制串的距离是去掉最长公共前缀的长度之和。比如: 1011000和1011110的最长公共前缀是1011, 距离就是 len("000"+"110") = 3 + 3 = 6. 现在给一个二进制串的集合, 求两个二进制串的最大距离. 样例 样
阅读全文
摘要:2020-03-10 13:04:56 问题描述: 给定一个01数组 arr 和 一个整数 k, 统计有多少区间符合如下条件: 区间的两个端点都为 0 (允许区间长度为1) 区间内 1 的个数不多于 k 样例 样例 1: 输入: arr = [0, 0, 1, 0, 1, 1, 0], k = 1
阅读全文
摘要:2020-03-01 20:34:36 一、队列模拟栈 问题描述: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to b
阅读全文
摘要:2020-01-23 19:39:26 问题描述: 问题求解: public int maxWidthRamp(int[] A) { Stack<Integer> stack = new Stack<>(); int res = 0; int n = A.length; for (int i = 0
阅读全文
摘要:2020-01-10 16:16:41 问题描述: 中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2.5 给出一个数组 nums,有一个大小为 k
阅读全文
摘要:2019-12-17 18:56:56 问题描述: 问题求解: 本题个人感觉还是很有难度的,主要的难点在于如何将题目转化为bit计数问题。 首先构建一个presum数组,这个没有问题。 需要对于任意一个j,我们需要知道的是presum[i]的个数使得 lower <= presum[j] - pre
阅读全文
摘要:2019-12-17 11:07:02 问题描述: 问题求解: 本题可以看作是逆序数问题的强化版本,需要注意的是num[i] > 2 * num[j],这里有0和负数的情况。
阅读全文
摘要:2019-12-17 09:42:44 问题描述: 问题求解: 逆序数问题非常经典,使用树状数组可以高效的解决这个问题。
阅读全文
摘要:2019-09-21 18:54:16 715. Range Module 问题描述: 问题求解: 用线段树解决了。
阅读全文
摘要:2018-11-16 22:45:48 一、单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者说单调队列完成的题目,具体来说,就是通过双端队列将可能的最大值维护起来。 public int[]
阅读全文
摘要:2018-11-06 20:06:04 LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。 如何高效的实现一个LFU Cache是一个难点,其实现方式要比LRU要复杂一点,问题的核心就是如果对
阅读全文
摘要:2018-11-05 21:05:38 LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务。 LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在
阅读全文
摘要:2018-10-06 22:01:11 问题描述: 问题求解: 为每个频率创建一个栈即可。
阅读全文
摘要:2018-09-06 16:19:17 Trie树,也被称为单词查找树,是一种树形结构。典型应用是用于统计和排序大量的字符串(但不限于字符串),所以经常被搜索引擎用于文本的词频统计。它的优点是可以最大限度的减少无谓字符的比较,查询效率比较高。 Trie的核心思想是空间换时间,利用字符串的公共前缀来降
阅读全文
摘要:2018-07-15 18:36:29 问题描述: 问题求解:
阅读全文
摘要:2018-05-01 15:13:08 并查集是一个时空复杂度非常优越的数据结构,并且通过优化后其复杂度为<O(1),O(n)>。 并查集的优化主要有两个方面: 路径压缩 按rank来合并 路径压缩: 按rank合并: 684. Redundant Connection 684. Redundant
阅读全文
摘要:2018-03-25 17:29:29 树状数组是一个比较小众的数据结构,主要应用领域是快速的对mutable array进行区间求和。 对于一般的一维情况下的区间和问题,一般有以下两种解法: 1)DP 预处理:建立长度为n的数组,每个结点i保存前i个数的和,时间复杂度O(n)。 查询:直接从数组中
阅读全文
摘要:2018-03-12 16:25:04 一、线段树 线段树(英语:Segment tree)是一种二叉树形数据结构,1977年由Jon Louis Bentley发明,用以储存区间或线段,并且允许快速查询结构内包含某一点的所有区间。 线段树是一棵二叉树,树中的每一个结点表示了一个区间[a,b]。a,
阅读全文
摘要:2018-03-07 19:01:21 void X_Sort ( ElementType A[], int N ) 1)N是正整数 2)只讨论基于比较的排序(> = < 有定义) 3)只讨论内部排序:所有内容都在内存中 4)稳定性:任意两个相等的数据,排序前后的相对位置不发生改变 5)没有一种排序
阅读全文
摘要:2018-03-06 17:42:02 一、最短路问题 问题描述:在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。 这条路径就是两点之间的最短路径 (Shortest Path) 第一个顶点为源点 (Source) 最后一个顶点为终点 (Destination) 问题分类:
阅读全文

浙公网安备 33010602011771号