WilliamCode算法大师
文章平均质量分 85
专业C++选手提供算法讲解及题解
WilliamCode
这个作者很懒,什么都没留下…
展开
-
算法与数据结构【C++与Java实现】:链表篇
对于大多数应用而言,存储数据最好的方式就是使用表。表有两种最常用的实现:数组和链表数组是在内存中连续存在的结构,且编译器就需要直到其大小。对于无法提前预估数据规模的程序,如果初始的数组太小,则需要扩展数组大小,这常常伴随着大量的内存复制,时间复杂度很高;如果初始的数组太大,则会造成很大的内存资源浪费。链表也是一种连续的数据结构,与数组的不同是,每一个元素在内存中不一定连续存储,元素与元...原创 2020-01-27 21:37:06 · 1647 阅读 · 0 评论 -
算法与数据结构【Java】:稀疏表
很多情境下,存储数据的最好方式就是表。当数据较为稠密的聚集在某个坐标范围中时,采用数组是最好的选择。比如,要存储一个班学生的成绩,该班级有30人,编号从1-30,有10门课,编号1-10那么就可以用一个30x10的数组存储这张成绩表,经济实惠使用方便但是有的时候数据非常稀疏,比如一个学校一共开设了1000门课,有的学生可以随意选课,现在需要一个数据结构存储每个学生每门课的成绩。显...原创 2020-01-27 21:27:40 · 482 阅读 · 0 评论 -
算法与数据结构【C++】:稀疏表
很多情境下,存储数据的最好方式就是表。当数据较为稠密的聚集在某个坐标范围中时,采用数组是最好的选择。比如,要存储一个班学生的成绩,该班级有30人,编号从1-30,有10门课,编号1-10那么就可以用一个30x10的数组存储这张成绩表,经济实惠使用方便但是有的时候数据非常稀疏,比如一个学校一共开设了1000门课,有的学生可以随意选课,现在需要一个数据结构存储每个学生每门课的成绩。显...原创 2020-01-27 21:27:54 · 633 阅读 · 0 评论 -
算法与数据结构【Java】:跳跃链表
普通链表有一个严重的缺陷:查找某对象时需要遍历整个链表,直到找到了该元素或者遍历完了整个链表也没有找到,时间复杂度很高。 为了解决该问题,可以使用跳跃链表。跳跃链表的特点:跳跃链表中的元素按照从小到达或从大到小的规则排列,该顺序在向链表加入元素时维护,所以,只能指定向链表插入某个值,不能指定插入位置跳跃链表使用了二分查找的思想, 查找某个元素的复杂度是O(logn)...原创 2020-01-26 16:20:43 · 505 阅读 · 0 评论 -
算法与数据结构【C++】:跳跃链表
普通链表有一个严重的缺陷:查找某对象时需要遍历整个链表,直到找到了该元素或者遍历完了整个链表也没有找到,时间复杂度很高。 为了解决该问题,可以使用跳跃链表。跳跃链表的特点:跳跃链表中的元素按照从小到达或从大到小的规则排列,该顺序在向链表加入元素时维护,所以,只能指定向链表插入某个值,不能指定插入位置跳跃链表使用了二分查找的思想, 查找某个元素的复杂度...原创 2020-01-26 16:19:38 · 391 阅读 · 0 评论 -
算法与数据结构【Java】:自组织链表
由于链表中,在某一时间段内每个元素使用的频率不同,所以,依赖于这种特点,产生了自组织链表,来提高链表的查找效率。自组织链表可以动态的组织链表,有很多种方法,这里列举4种: 1、前移法:找到需要的元素之后,将它放到链表开头 2、换位法:找到需要的元素之后,将它和前驱交换位置 3、计数法:在结点中记录被访问的次数,根据被访问的次数,对链表进行排序 4、排序法:根据链表...原创 2020-01-26 16:16:00 · 223 阅读 · 0 评论 -
算法与数据结构【C++】:自组织链表
自组织链表由于链表中,在某一时间段内每个元素使用的频率不同,所以,依赖于这种特点,产生了自组织链表,来提高链表的查找效率。自组织链表可以动态的组织链表,有很多种方法,这里列举4种: 1、前移法:找到需要的元素之后,将它放到链表开头 2、换位法:找到需要的元素之后,将它和前驱交换位置 3、计数法:在结点中记录被访问的次数,根据被访问的次数,对链表进行排序 4、排...原创 2020-01-26 16:15:15 · 540 阅读 · 0 评论 -
算法与数据结构【Java】:循环链表
1、定义:循环链表是一种首尾相接的链表,其本身并没有首尾,但是为了给链表提供入口,方便对链表进行操作,所以定义了“头”和“尾”2、循环链表可以在单向链表上通过简单的增改来实现,但是这里单独实现了循环链表。3、循环链表的用处举例:操作系统任务调度时,相同优先级的任务会获得相同时间的CPU使用权,在一个任务占用CPU结束后,需要将CPU让给下一个任务,如此循环,可以用到循环链表。下方是Java...原创 2020-01-26 16:13:48 · 223 阅读 · 0 评论 -
算法与数据结构【C++】:循环链表
1、定义:循环链表是一种首尾相接的链表,其本身并没有首尾,但是为了给链表提供入口,方便对链表进行操作,所以定义了“头”和“尾”2、循环链表可以在单向链表上通过简单的增改来实现,但是这里单独实现了循环链表。3、循环链表的用处举例:操作系统任务调度时,相同优先级的任务会获得相同时间的CPU使用权,在一个任务占用CPU结束后,需要将CPU让给下一个任务,如此循环,可以用到循环链表。下方是C...原创 2020-01-26 16:11:54 · 1545 阅读 · 0 评论 -
算法与数据结构【Java】:双向链表
双向链表相对于单向链表的优点: 1、单向链表在需要对列表尾部进行操作时,需要通过遍历的方式获取尾部的结点,很浪费时间 2、对于需要频繁使用deleteFromTail()和addToTail()方法的程序,程序效率会非常低 3、双向链表存储了每个结点前面的结点,在对尾部进行操作时,能非常方便的获取尾部的结点信息,方便对尾部进行操作,大大提高了程序效率 4、但是,...原创 2020-01-26 16:10:49 · 251 阅读 · 0 评论 -
算法与数据结构【C++】:双向链表
双向链表相对于单向链表的优点: 1、单向链表在需要对列表尾部进行操作时,需要通过遍历的方式获取尾部的结点,很浪费时间 2、对于需要频繁使用deleteFromTail()和addToTail()方法的程序,程序效率会非常低 3、双向链表存储了每个结点前面的结点,在对尾部进行操作时,能非常方便的获取尾部的结点信息,方便对尾部进行操作,大大提高了程序效率 4、但是,...原创 2020-01-26 16:09:37 · 300 阅读 · 0 评论 -
算法与数据结构【Java】:普通单向链表
普通单向链表应该包含的数据和方法:结点类(Node): 属性: AnyType value; //任意类型的数据 Node* next; //指向下一个节点的指针 方法: 构造方法 Node(AnyType* value, Node* next);链表类(LinkedList): Node*...原创 2020-01-26 16:07:54 · 239 阅读 · 0 评论 -
poj1080 Human Gene Functions
Human Gene FunctionsTime Limit: 1000MS Memory Limit: 10000K Total Submissions: 18536 Accepted: 10295Description It is well known that a human gene can be considered as a sequence, consist原创 2016-03-31 16:17:21 · 660 阅读 · 0 评论 -
poj3252 Round Numbers
Round NumbersTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 11387 Accepted: 4263DescriptionThe cows, as you know, have no fingers or thumbs and thus ar原创 2016-03-31 09:27:03 · 656 阅读 · 0 评论 -
poj 1080 Human Gene Functions
Human Gene Functions--------------------Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 18536 Accepted: 10295DescriptionIt is well known that a human gene can be considered as a seq原创 2016-03-30 15:33:19 · 489 阅读 · 0 评论 -
POJ - 2676 Sudoku 题解
POJ - 3083 Children of the Candy Corn 中文题意+题解原创 2016-03-22 19:47:40 · 613 阅读 · 0 评论 -
POJ - 3083 Children of the Candy Corn 中文题意+题解
POJ - 3083**Children of the Candy Corn==========================**Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSubmit StatusDescriptionThe cornfield maze is a原创 2016-03-21 16:56:56 · 767 阅读 · 0 评论 -
3192: [JLOI2013]删除物品
3192: [JLOI2013]删除物品Time Limit: 10 Sec Memory Limit: 128 MB Submit: 123 Solved: 77 [Submit][Status][Discuss] Description箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆。 (2)所有物品都是一样的,但是它们有不同的优先级。 (3)你只能够移动某原创 2016-03-18 21:07:04 · 404 阅读 · 0 评论 -
2821: 作诗(Poetize)
**2821: 作诗(Poetize)** !!!暴力是不对的!!!----------------------------------Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2347 Solved: 669[Submit][Status][Discuss]Description神犇SJY虐完HEOI之后给傻×LYD出了一原创 2016-03-18 13:52:51 · 701 阅读 · 0 评论 -
二分图强连通分量 tarjan 模板
#include#include#include#include#define maxx 200000using namespace std;int a,b,c,d,n,m;int cnt,fail,biao;//cnt是每个强连通分量的编号//fail是栈sta的指针//biao用于给节点编号int sta[maxx],belong[max原创 2016-03-14 20:36:21 · 423 阅读 · 0 评论 -
线段数求和模板
/*上次实现了线段树上的求组区间最大值操作,现在来实现求区间和的操作,其实代码兵没哟修改多少同理,拿走的童鞋请点个赞,谢谢本文章是个人作品,可以转载,因为你知道的太多了,如果你心情好,带上地址吧,我叫WilliamCode*/#include#include#include#define lson id*2 //id的左子树编号#define rson i原创 2016-03-08 16:40:52 · 922 阅读 · 0 评论 -
shupou
#include#include#include#includeusing namespace std;const int maxx=140000;vector lin[maxx];int deep[maxx],fa[maxx],top[maxx],in[maxx],bs[maxx];int dfs1(int x,int pre,int d){原创 2016-03-08 21:41:32 · 410 阅读 · 0 评论 -
POJ - 1451 T9
POJ - 1451T9Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64uSubmitStatus DescriptionBackground A while ago it was quite cumbers原创 2016-03-02 15:06:43 · 870 阅读 · 0 评论 -
POJ - 3691 DNA repair
POJ - 3691DNA repairTime Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64uSubmitStatus DescriptionBiologists finally invent technique原创 2016-03-01 18:55:59 · 670 阅读 · 0 评论 -
BestCoder Round #74 (div.2) LCP Array
真是TMD,bestcoder 73 竟然做了一天LCP Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1087 Accepted Submission(s): 306Problem Descri原创 2016-03-07 20:52:57 · 573 阅读 · 0 评论