数据结构
文章平均质量分 67
AnICoo1
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (字典树二进制)
D. Vasiliy’s Multisettime limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard outputAuthor has gone out of the stories about Vasiliy, so here is jus原创 2016-08-21 14:49:41 · 420 阅读 · 0 评论 -
常见的排序算法
排序算法排序算法是最基础,也是最简单的算法思想,因为应用场景多,书写简单,所以应用较为普遍,所以在面试和考试的时候,都会涉及到排序算法,虽然排序算法种类很多,但是只要理解了思想,然后灵活运用,那么就不难记忆. 排序算法两个需要记忆和理解的点就是:算法思想和时间复杂度.下面我们就介绍和分析一下常见的几种排序算法冒泡排序冒泡排序是最基础的排序算法,很多基础语言中都会出现. * 思想原创 2017-03-18 20:18:03 · 796 阅读 · 3 评论 -
LeetCoder 9. Palindrome Number
题意判断一个数是否是回文数思路解法一: 将数字转换为字符串,然后判断 解法二: 将数字倒转变为新的数字,注意新的数字可能会溢出结果Your runtime beats 23.71 % of cpp submissions代码class Solution {public: bool isPalindrome(int x) { if(x < 0) retu原创 2017-04-28 17:23:00 · 233 阅读 · 0 评论 -
LeetCoder 10. Regular Expression Matching
题意一个目标串S,一个模式串P,判断二者是否匹配,其中几种匹配规则’ . ‘可以表示任意的单个字符’ * ‘可以代表它之前的字符的任意个数,可以为0或者更多几个例子:isMatch(“aa”,”a”) → falseisMatch(“aa”,”aa”) → trueisMatch(“aaa”,”aa”) → falseisMatch(“aa”, “a*”) → tru原创 2017-04-29 21:57:56 · 290 阅读 · 0 评论 -
LeetCoder 2. Add Two Numbers
题意给你两个链表表示的数,将它们相加后的结果输出思路和数组进行大数相加没什么区别,直接写即可结果Your runtime beats 40.55% of cpp submissions.代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2017-04-23 13:36:34 · 330 阅读 · 0 评论 -
LeetCoder 1. Two Sum
题意一个序列,在序列中找两个数,使其相加等于target,找出这对数。思路解法一: 暴力查找,两层for循环遍历,时间复杂度O(n2)O(n^2) 解法二: Hash,在遍历数组的时候,检查target−num[i]target - num[i] 是否存在,如果存在,即表明找到答案,若不存在,将num[i]num[i] 存于Hash表中,时间复杂度O(n)O(n)结果Your原创 2017-04-23 13:32:54 · 406 阅读 · 0 评论 -
LeetCoder 4. Median of Two Sorted Arrays (有序数组合并的中位数)
题意两个有序数组A,B,求两个数组合并后的中位数思路解法一: 使用归并排序的思路,遍历两个有序数组,然后当遍历数为我们要找到的中位数的位置的时候,即可停止。时间复杂度O(n+m)O(n+m) 解法二: 根据中位数的定义可知,中位数左边的数小于等于中位数,中位数右边的数大于等于中位数,那么我门可以将左边的数看做一个集合leftPartleftPart,右边的数看做一个集合righ原创 2017-04-24 20:06:04 · 265 阅读 · 0 评论 -
LeetCoder 5. Longest Palindromic Substring
题意求一个字符串的最长回文子串思路解法一: 暴力求解,枚举两个端点,检查范围内的字符串是否为回文串,时间复杂度O(n3)O(n^3) 解法二: DP求解,最长公共子序列变形一下,将字符串倒序进行DP,时间复杂度O(n2)O(n^2) 解法三: manachermanacher算法,可以百度一下算法的讲解,时间复杂度O(n)O(n)结果Your runtime bea原创 2017-04-25 14:30:54 · 466 阅读 · 0 评论 -
LeetCoder 6. ZigZag Conversion
题意将一个字符串按照题目中所规定的的规则进行摆放,然后输出新的字符串序列思路如题中的例子,我们可以将摆放好的字符串来进行偏移来找出规律:P A H N A P L S I I G Y I R如上图所示,我们可以发现,第一层之间的字符下标相差(numRows−1)∗2(numRows - 1) * 2,然后接下来依次递减,递减的程度和层数的奇偶有关系原创 2017-04-26 21:48:20 · 241 阅读 · 0 评论 -
LeetCoder 7. Reverse Integer
题意给你一个32位的整数,有可能为负数,然后将数字倒转,输出新的数字,如果新的数字超出32位的整数,输出0.思路考虑到整数反转有可能溢出,所以说使用64位的longlonglonglong来存储,需要注意,对xx 进行取绝对值有可能会溢出,所以说使用无符号的整型来存储.结果Your runtime beats 88.41 % of cpp submissions代码class Solution {原创 2017-04-26 21:54:10 · 298 阅读 · 0 评论 -
LeetCoder 8. String to Integer (atoi)
题意将一个字符串转换为数字思路注意情况即可:前面有空格具有多个正负号具有前导零具有其他字符(例如英文字母等)字符串组成的数字可能会溢出,即超出intint结果Your runtime beats 58.71 % of cpp submissions.代码class Solution {public: int myAtoi(string str) { int le原创 2017-04-27 16:20:07 · 355 阅读 · 0 评论 -
LeetCode 146. LRU Cache
题意设计一个 LRUCacheLRU Cache 的算法,什么是 LRULRU,可以参考:LRU思路使用 HashHash + 双向链表,主要是链表的删除和添加操作,链表头为新加入的任务,链表尾为最近最久未被使用的任务. 当新来一个任务之后,查看 HashHash 表中时候存在:如果存在,将此任务置于链表的头结点,操作为:先删除链表中的此任务,然后将此任务重新加入链表如果不存在,说明需要删除链原创 2017-09-05 12:52:47 · 336 阅读 · 0 评论 -
二叉树总结
什么是二叉树?引用自百度百科: 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree),同样的左右子树也都是二叉树.前言本文代码实现为 C/C++,因为不是一个完整的讲解文章,只是个人思路,所以说思路讲解可能有不足之处,有错误请指出.节点定义使用单向链表的形式,只保存当前节点的子节点和权值,不保存父节点原创 2017-09-06 19:39:48 · 577 阅读 · 2 评论 -
LeetCoder 3. Longest Substring Without Repeating Characters
题意求一个字符串的最长连续不重复子串思路解法一 暴力,两层循环枚举起点和终点,一层循环判断这段字符串中是否存在重复的字符,时间复杂度O(n3)O(n^3) 解法二 尺取法,设置左右两个指针,右指针不断向前移动直到出现重复的字符,出现重复字符之后,左指针开始前进,直到找到那个重复的字符并越过,然后继续,中间记录最长的连续不重复子串长度,时间复杂度O(n)O(n)结果Your ru原创 2017-04-23 13:43:05 · 381 阅读 · 0 评论 -
LeetCode 160. Intersection of Two Linked Lists
题意求两个链表的交点思路思路一:求出两个链表的长度差,然后将较长的一个偏移长度差的长度,然后求交点思路二:类似于求链表是否存在环,设定两个指针,如果一个指针走到底了,那么从另一个链表的头节点开始继续,直到两个指针相等.代码思路一:/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2017-09-10 16:50:52 · 367 阅读 · 0 评论 -
LeetCode 141. Linked List Cycle
题意判断一个单链表是否存在环思路设置两个指针快和慢,快指针每次前进两个节点,慢指针每次前进一个节点.时间复杂度:O(n)O(n)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x),原创 2017-09-10 17:03:15 · 300 阅读 · 0 评论 -
Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn (二叉树+map)
C. Lorenzo Von Matterhorn time limit per test 1 second memory limit per test 256 megabytes input standard input output standard outputBarney lives in NYC. NYC has infinite number of intersectio原创 2016-07-15 22:17:09 · 511 阅读 · 0 评论 -
POJ 3250 Bad Hair Day (栈)
Bad Hair DayTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 15939 Accepted: 5381DescriptionSome of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a ba原创 2015-11-14 22:10:04 · 820 阅读 · 0 评论 -
HDOJ The kth great number (优先队列)
The kth great number Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65768/65768K (Java/Other)Total Submission(s) : 24 Accepted Submission(s) : 13Problem DescriptionXiao Ming and Xiao原创 2015-07-28 21:15:35 · 950 阅读 · 0 评论 -
括号配对(简单栈)
描述输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3[(])(])([[]()])样例输出NoNoYes用指针的方法较为简单,但是栈较容易理解ac代码:#include#include#includeusing namespace st原创 2015-05-31 18:20:52 · 299 阅读 · 0 评论 -
HDOJ 1237 简单计算器(简易栈)
简单计算器Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 14825 Accepted Submission(s): 5044Problem Description读入一个只包含 +, -, *, / 的非负整原创 2015-07-27 18:59:05 · 803 阅读 · 0 评论 -
HDOJ 1022 Train Problem I(简单栈)
Train Problem ITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25517 Accepted Submission(s): 9640Problem DescriptionAs the new te原创 2015-07-20 16:46:41 · 328 阅读 · 0 评论 -
NYOJ 757 期末考试(优先队列)
期末考试时间限制:1000 ms | 内存限制:65535 KB难度:2描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗?输入输入n,表示n门功课(n(以文件结尾)输出输出扣除的最小分数。样例输入33 103 53原创 2015-07-28 16:48:31 · 321 阅读 · 0 评论 -
HDOJ 1509 Windows Message Queue (简单优先队列 )
Windows Message QueueTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4360 Accepted Submission(s): 1728Problem DescriptionMessage原创 2015-07-28 15:16:39 · 355 阅读 · 0 评论 -
NYOJ 55 懒省事的小明(简单优先队列)
懒省事的小明时间限制:3000 ms | 内存限制:65535 KB难度:3描述 小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。小明决定把所有的果子合成一堆。 因为小明比较懒,为了省力气,小明开始想点子了: 每一次合并,小明可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有原创 2015-07-28 16:14:56 · 347 阅读 · 0 评论 -
HDOJ Stones (优先队列)
Stones Time Limit : 5000/3000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 5 Accepted Submission(s) : 4Problem DescriptionBecause of the wrong status of the原创 2015-07-28 21:17:07 · 1102 阅读 · 0 评论 -
HDOJ 看病要排队 (优先队列)
看病要排队 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 12 Accepted Submission(s) : 11Problem Description看病要排队这个是地球人都知道的常识。不过经过细心的0068的观原创 2015-07-28 21:18:22 · 441 阅读 · 0 评论 -
NYOJ 754 黑心医生(优先队列)
黑心医生时间限制:1000 ms | 内存限制:65535 KB难度:2描述 南阳有一家灰常势利的医院,这家医院有一个灰常势利的门诊医生,由于他的医术比较高明,所以每天都有很多人来看他的门诊。但是,他很势利,所以他看病有一个规矩,那就是优先给有钱的人看病。他事先了解了挂他的号的病人的家庭经济情况,所以,当轮到某病人就诊时,如果剩下的病人里有比他更富有的病人,那么他就必须得站原创 2015-07-31 20:23:18 · 954 阅读 · 0 评论 -
HDOJ Doing Homework again (贪心+优先队列)
Doing Homework again Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 31 Accepted Submission(s) : 25Problem DescriptionIgnatius has just原创 2015-07-31 17:46:29 · 421 阅读 · 0 评论 -
HDU EXCEL排序
EXCEL排序 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 21 Accepted Submission(s) : 8Font: Times New Roman | Verdana | GeorgiaFont Si原创 2015-07-22 17:22:05 · 392 阅读 · 0 评论 -
快速排序
感觉快排的原理就像种萝卜,一个萝卜一个坑。例如有一群人,每个人都有一个号码并且按号码站好了:第一个人站出来说了:“比我高的站右边,比我低的站左边。“,这就把筛选条件找了出来,而且第一个人在最后所处的位置也找到了,然后从高号码开始筛选,如果比他高,位置不变,轮到低一位的人,如果遇到比他低的人,结束从高号码到低号码的循环,然后从低号码到高号码开始检查,(以上都必须保持低号码小于高号码),然后递原创 2015-07-22 10:48:01 · 309 阅读 · 0 评论 -
开门人和关门人
开门人和关门人 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 28 Accepted Submission(s) : 1Font: Times New Roman | Verdana | GeorgiaFont S原创 2015-07-22 17:17:45 · 295 阅读 · 0 评论 -
优先队列题目
Problem DescriptionFarmer John wants to repair a small length of the fence around the pasture. He measures the fence and finds that he needsN (1 ≤ N ≤ 20,000) planks of wood, each having some in原创 2015-08-05 15:03:37 · 375 阅读 · 0 评论 -
HDOJ 新兵训练问题 (队列)
Problem Description某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 Input本题有多原创 2015-08-05 15:05:29 · 893 阅读 · 0 评论 -
HDOJ 5437 Alisha’s Party (优先队列)(长春网络赛)
Alisha’s PartyTime Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1104 Accepted Submission(s): 306Problem DescriptionPrincess Alish原创 2015-09-14 14:21:56 · 670 阅读 · 0 评论 -
LeetCode 98. Validate Binary Search Tree
题意判断一棵树是否是二叉排序树思路递归中维护当前子树的最大值和最小值,左子树维护最大值,右子树维护最小值,然后进行判断代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNod原创 2017-09-11 14:01:18 · 440 阅读 · 0 评论