摘要:
这个是线段树中最入门的题目,但是由于不了解线段树的概念,当然更不知道怎么样,所以觉得挺费劲,整了一会发现还是基本的思想,就是还是将一个线段继续分割,一直分割到不能分割,这道题目是知道多少个军营,也就是区间为1-n, 将它分割, 建立树, 可以不用保存它区间的左端点和右端点,用数组下标代表就可以了, ... 阅读全文
摘要:
线段树是一颗二叉树,他的每个节点都是一个区间,此题为线段树的入门题目,只是学习笔记。例题:给定N个线段,给定M个点,求点在多少个线段中出现过,此时如果用传统的方法来求,时间复杂度太高,但是,线段树的时间复杂度还可以接受。步骤为:1. 首先找一个区间,能覆盖给定的所有区间, 然后把此区间建立线段树,建... 阅读全文
摘要:
这个题基本上是并查集稍微一变, 只是加了一些判断条件而已,就是将点合并成树, 最后遍历一下, 统计一下有多少棵树, 如果不是1的话, 肯定不是树,所以,可以根据这个来判断 1 #include 2 #include 3 #include 4 using namespace std; 5 6 ... 阅读全文
摘要:
并查集, 从这个名字上也可以知道是合并和查找集合的, 它也叫不相交的集的数据结构, 典型的例题有食物链, 来判断有多少个独立的树什么的, 下面一个例题,来简单的解释并查集:一个犯罪团伙一共有n个人, 现在只知道谁跟谁一伙, 来求出一共有多少个团伙, 代码如下: 1 #include 2 //并查集... 阅读全文
摘要:
二叉搜索树的建立是通过递归方式来建立的,和普通的二叉树的区别是加上了约束, 它的左子树的所有元素都要比根节点要小, 而右子树的所有元素都要根节点要大,左右子树也符合这个条件。他的遍历方式和普通二叉树的遍历没有什么区别。下面是关于二叉搜索树的添加节点和前序遍历,中序遍历, 后续遍历和层级遍历 1 //... 阅读全文
摘要:
堆是一种特殊的数据结构,它是完全二叉树,可以用一维数组来保存,因为二叉树的性质,所以根据数组下标就可以确定位置,下面代码是关于堆的实现, 删除的过程其实就是将堆的根节点取出的过程, 这时的顺序就是有序的, 如果是最小堆,那么就是从小到大排序,反之,就是从大到小 1 #include 2 3 in... 阅读全文
摘要:
字典树是哈希树的变种, 它采用公用前缀的方式来提高效率, 刚开始以为公用前缀, 空间会节省, 后来想想, 空间也不是节省, 因为每一个都有26个指针(这里假设都是小写字母的话), 不过他的时间复杂度是常数级的, 效率非常高, O(1)的复杂度, 它是典型的空间换时间, 他常用的功能是增删查, 其实删... 阅读全文
摘要:
重建二叉树主要是给你一颗二叉树的前序遍历的结果和中序遍历的结果或者后序遍历的结果或者中序遍历的结果,让你求出其中的后序遍历的结果或者前序遍历的结果,这里知道其中的两个就能求出第三个,但是知道的两个必须要有中序遍历,求这样的问题主要有两种方式,一种是把树建立起来,然后在遍历就行了,还有一种常用的方式是... 阅读全文
摘要:
因为树有多种表示方式,也可以不用二叉树来表示,但是那样有局限性, 就比如一个节点有几个孩子,这个数目都是不确定的,如果用二叉树来表示,那样就比较清楚的显示出家谱中的人员组成,但是不能用孩子表示法,因为那样最多只能表示两个孩子,但是可以转化一下表示方法,用孩子兄弟表示方法来表示,那样,就可以有无限多个... 阅读全文
摘要:
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116士兵杀敌(一) 数组是固定的,所以可以用一个sum数组来保存每个元素的和就行,但是不能每次都加,因为那样会超时,查询次数太多。但是这个士兵杀敌(二)就不能用那个方法来解了,因为这个是动态... 阅读全文