数据结构
数据结构
链表与邻接表:树与图的存储
栈与队列:单调队列、单调栈
kmp
Trie
并查集
堆
Hash表
SoKeeGumpCN
瞎混
展开
-
数据结构-二叉树、树、森林基础
原创 2021-06-08 11:31:49 · 176 阅读 · 0 评论 -
关于程序设计最大值“0x3F3F3F3F“问题讨论
在程序设计特别是有向图算法中经常需要去表达不可达的距离,也就是无穷大来填充邻接矩阵,初学者包括我自己会使用类似9999999(一刀暴击?)或者干脆直接Integer.MAX_VALUE这样不专业的手法,前者只需要根据数据的范围合理划定即可(尽管看起来非常难受),而后者——如果算法中从存在松弛操作例如dist[k] = Math.min(dist[k], dist[t] + graph[t][k]); //源自于Dijkstra的更新部分dist[k] 便会超过Integer的最大范围从而变为负数,原创 2021-01-14 15:13:26 · 1092 阅读 · 0 评论 -
AcWing 1242. 修改数组(并查集)
Problem是看不出用并查集能解决问题。就像单链表一样,初始所有的点指向自己,表示没用过,否则指向下一个点(+1),很巧妙的算法import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;class Main...原创 2020-03-16 16:13:34 · 164 阅读 · 0 评论 -
AcWing 1207. 大臣的旅费(树的直径)
Problem这个题是一个树的最长链,也叫树的直径的模板题。讲义一讲义二简单来说就是一棵带权树中求出一条路,这条路的权重之和是最大的。我选择了一个感觉稍微简单的解法,树形DP,dist[x] 代表从x以下的子树中权重之和最大的值。import java.io.BufferedReader;import java.io.InputStreamReader;import java.io...原创 2020-03-03 22:01:15 · 166 阅读 · 0 评论 -
AcWing 1240. 完全二叉树的权值(二叉树)
Problem第N次取2^N - 1^个数,判断哪次取数的累加最大。分析一下就很简单了。import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.util.ArrayDeque;import java.util.Queue;class ...原创 2020-02-28 14:54:45 · 343 阅读 · 0 评论 -
AcWing 1228. 油漆面积(线段树)
去年的这个时间发过这个问题,当时的解答是暴力解法去年的题解网上普遍都是暴力求解的,由于蓝桥的OJ并没有给出满数据的测试,所以暴力也能过,但是其实数据量达到5000就已经超时了,暴力简单,但是这个题的优化是很难的,需要用线段树优化,而且是一个很难想到,不常见的线段树做法。先贴上C++的AC代码,完全弄清楚了我再重新写一遍。#include <cstdio>#include &l...原创 2020-02-20 16:01:06 · 244 阅读 · 0 评论 -
AcWing 1215. 小朋友排队 (树状数组)
添加链接描述这个题其实需要证明一下答案就是每个数加上其前大于自己和其后小于自己的数,这就是每个数需要加的次数,用贪心法想到这个,然后证明其正确性其实是一个逆序对的问题,但是暴力求解会超时,需要用树状数组优化。import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;...原创 2020-02-19 11:09:30 · 156 阅读 · 0 评论 -
AcWing 1270. 数列区间最大值 (线段树)
Problem线段树模板题,线段树能解决的范围远多于树状数组,这个题的要求是求区间最大值。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;class Main { static Buffere...原创 2020-02-18 13:33:44 · 161 阅读 · 0 评论 -
AcWing 1264. 动态求连续区间和(树状数组 || 线段树)
树状数组和线段树以前很少接触,特别是线段树,竞赛见到的次数还是不少的,今天就彻底搞明白一下。首先是树状数组,时间O(logN),能解决的问题是快速求动态的前缀和,也就是动态改变数组的值以后求前缀和(单点修改,区间查询),树状数组解决的就这一类问题,不过解决起来代码量小,速度快;对比线段树,能解决的问题就很广泛了。模板题Problem这个是树状数组的模板函数import java.io.B...原创 2020-02-16 16:08:26 · 218 阅读 · 0 评论 -
AcWing 1265. 数星星 (树状数组)
Problem树状数组新手表示看不出这是一道树状数组的应用题。这个题需要累计左下角的星星数量,枚举会超时;纵坐标按照升序给出,对于新来的xy,y是当前纵坐标最大值,只需累计1到x的星星即可,然后树状数组优化。import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;...原创 2020-02-17 12:56:01 · 197 阅读 · 0 评论 -
AcWing 841. String-Hash (String - Hash) Described by Java
Another method on Hash of String , very strange and difficult to think.Firstly we have a browse on Problem in AcWing.The String Hash method is to solve the deal like this kind of problem.Principle:...原创 2019-11-09 20:32:19 · 92 阅读 · 0 评论 -
AcWing 840. Simulate the HashMap(Hash _ Open Addressing) Described by Java
Problem in AcWingAnd we got the open addressing method to solve the Hash.The Open Addressing does not need too many array, only one.Used to create two to three times size of the problem given.Like...原创 2019-11-09 06:27:37 · 92 阅读 · 0 评论 -
AcWing 840. Simulate the HashMap(Hash) Described by Java
The lecture we train the Hash Algorithm, and using the array.The discretization is the special case of Hash, cause of the discretization has special order, and the Hash is hash, no orders.Like the t...原创 2019-11-08 23:32:11 · 96 阅读 · 0 评论 -
838. Heapsort(Module HeapSort) Described by Java
Now we can note module of HeapSort.The problem.Problem in AcWingThe problem is to print the minimal k number, it’s easy to change the output when we need. The Time Complexity is O(nlogn).And the C...原创 2019-11-07 23:23:40 · 193 阅读 · 0 评论 -
AcWing 240. 食物链(Weighted disjoint set union) Described by Java
A difficult problem is about weighted disjoint set union, to maintain another array distance[] to describe the distance from x to p[x].And the problem. ProblemLike a tree , the distance from the l...原创 2019-11-07 18:32:38 · 279 阅读 · 0 评论 -
AcWing 837. 连通块中点的数量(disjoint set union) Described by Java
Now we still train the disjoint set union.The last module:import java.util.Arrays;import java.util.Scanner;public class Main { static int pre[]; static int n; static int m, a, b; st...原创 2019-11-06 06:44:44 · 149 阅读 · 0 评论 -
AcWing 143. 最大异或对(Trie) Described by Java
After traveling from Stockholm and Uppsala , I must come on and train some more.Today training is still Trie Tree , The Trie not only can save the words , also can save the numbers, so it can save an...原创 2019-11-05 20:04:40 · 130 阅读 · 0 评论 -
AcWing 835. Trie(Trie) Described by Java
This is Trie Tree,Dictionary tree, is used to search the words, save the words…It’s a words’ set.维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入...原创 2019-10-31 23:55:38 · 119 阅读 · 0 评论 -
AcWing 831. KMP(KMP) Described by Java
Today is a very difficult and messy algorithm—KMP, used to deal with the String matching problem.给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N...原创 2019-10-31 23:03:52 · 98 阅读 · 0 评论 -
AcWing 154.Sliding window (monotonic queue) Described by Java
And this time we learn the module of monotonic queue, fuck me few hours to think and test the IO problems.Cause of the data is too huge to 1e6 , C++ is easy to deal with scanf and printf or with the ...原创 2019-10-27 23:13:40 · 78 阅读 · 0 评论 -
AcWing 830. 单调栈(Monotonic stack Module) Described by Java
Today we again learn the monotonic stack module , it is very difficult to think.The problem :给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表...原创 2019-10-27 17:33:45 · 177 阅读 · 0 评论 -
AcWing 829. 模拟队列(Array simulate list) Described by Java
This time we use array to simulate the list, not many differences with the others told just ago.Attention : thats all are basic algorithm module实现一个队列,队列初始为空,支持四种操作:(1) “push x” – 向队尾插入一个数x;(2) “p...原创 2019-10-27 03:00:03 · 96 阅读 · 0 评论 -
AcWing 828. 模拟栈(Array to simulate Stack) Described by Java
And using array to simulate the STACK , not hard after completing the list simulation.实现一个栈,栈初始为空,支持四种操作:(1) “push x” – 向栈顶插入一个数x;(2) “pop” – 从栈顶弹出一个数;(3) “empty” – 判断栈是否为空;(4) “query” – 查询栈顶元素。...原创 2019-10-26 23:58:16 · 117 阅读 · 0 评论 -
AcWing 827.Double linked list(double link list Module) Described by Java
After single link list , we now learn double link list module.Using re[] and le[] to show rightnext and leftnext.We can see the problem实现一个双链表,双链表初始为空,支持5种操作:(1) 在最左侧插入一个数;(2) 在最右侧插入一个数;(3) 将第k个...原创 2019-10-26 22:08:02 · 86 阅读 · 0 评论 -
AcWing 826.Single List(Array to simulate List) Described by Java
We always write a class to describe list or use the class like ArrayList …Like this :class Node{ int value; Node next;}But when meet volume data , the codeNode n = new Node();is very waste t...原创 2019-10-26 20:16:55 · 125 阅读 · 0 评论 -
LeetCode 295. 数据流的中位数 (对顶堆)Java + 优先队列PriorityQueue学习
做题前先学习了一个Java优先队列数据结构PriorityQueue对于优先队列,这篇漫画说的很清楚http://www.sohu.com/a/256022793_478315Java 的PriorityQueue在构造时需要手写排序方法,具体后文在代码中实现。在学习完优先队列和堆结构后,看题:LeetCode 暑期打卡第七周题九:中位数是有序列表中间的数。如果列表长度是偶数,中位数则...原创 2019-10-06 22:55:01 · 416 阅读 · 0 评论 -
LeetCode 692.前K个高频单词(小根堆) Java
LeetCode 暑期打卡第七周题八很费解理解的一道题,也是头一次重写集合排序,学习到了…题目:给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, ...原创 2019-10-05 21:52:53 · 424 阅读 · 0 评论 -
Java容器类-重写compare方法进行元素排序学习
刷题进行到LeetCode 692.前K个高频单词需要用到小根堆数据结构,发现自己对Java重写compare方法排序掌握很差,用了很长一段时间学习重写compare方法,同时现在并没有搞清楚 java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法 (感觉混在一起有点乱),这篇文章先仅仅学习重写compare方法进行排序。仅仅用了Ar...原创 2019-10-05 19:50:23 · 555 阅读 · 0 评论 -
LeetCode 684. 冗余连接 (并查集) Java
LeetCode 暑期打卡第七周题七在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删...原创 2019-10-03 17:07:29 · 213 阅读 · 0 评论 -
AcWing 836. 合并集合(并查集)
昨天写了并查集的LeetCode模板题,今天再练习AcWing的模板题,遇到一点小问题。题目:一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m...原创 2019-10-02 17:08:45 · 211 阅读 · 1 评论 -
LeetCode 547. 朋友圈 (深度优先搜索 or 广度优先搜索 or 并查集)
LeetCode 暑期打卡第七周题六,很值得学习的一题,用dfs,bfs,并查集都可以解决。题目:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已...原创 2019-10-02 04:44:26 · 596 阅读 · 0 评论 -
初学---并查集
一个十分有趣的算法,也是很实用的算法,参照https://blog.csdn.net/qq_38180223/article/details/81145268的故事引用,说的很明白了,自己再记录一遍 ,方便看。话说江湖上散落着各式各样的大侠,有上千个之多。他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架。但大侠们有一个优点就是讲义气,绝对不打自己的朋友...转载 2019-10-01 05:14:07 · 119 阅读 · 0 评论 -
LeetCode 652.寻找重复的子树(搜索+哈希表)
LeetCode 暑期打卡第七周题四题目:给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。本身不擅长树的处理,好在前几周的题目训练过搜索。思路遍历整个树,利用哈希表存储,实现并不难,具体看代码:/** * Definition for a binary tree node. * p...原创 2019-09-30 16:28:34 · 131 阅读 · 0 评论 -
LeetCode 706. 设计哈希映射 (哈希表基础简单实现)
LeetCode暑期打卡第七周题3题目:不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。示例:MyHashMap ...原创 2019-09-30 02:05:33 · 248 阅读 · 0 评论 -
LeetCode 187. 重复的DNA序列 (哈希表)
LeetCode 暑期专题打卡第七周题2题目:所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来查找 DNA 分子中所有出现超过一次的 10 个字母长的序列(子串)。示例:输入:s = “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”输...原创 2019-09-29 23:22:12 · 187 阅读 · 0 评论 -
LeetCode 42. 接雨水 (单调栈 or 双指针算法)
记录前两天写的一题,两种方法。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6这个题本身是单调栈的题,但是我试着用双指针完成,测出来居然比单调栈要快?哈哈哈方法一 : 单调栈单调栈的实现真的太过神奇,我们只需要会用就可以,完全凭借自己去想很难想到。用一个递减...原创 2019-09-29 17:58:00 · 289 阅读 · 0 评论