12 2014 档案
摘要:题目: Find them,Catch them 刚开始以为是最基本的并查集,无限超时。 这个特殊之处,就是可能有多个集合。 比如输入D 1 2 D 3 4 D 5 6...这就至少有3个集合了。并且任意2个集合之间成员的敌我关系不明。 这里每个集合里面的成员关系要记录,他们在一个集合里...
阅读全文
摘要:题目:Hire and Fire 题目翻译成数据结构就是:建树,加结点,删除结点,打印结点。只有删除结点稍微复杂点,因为删除设计掉树的调整。 首先要考虑树怎么存储才能使解题更顺手。 1.我们要存储每个结点的孩子,父亲和名字。存储孩子是因为第一个孩子可能会“升级”,存储父亲是因为要打印,名字...
阅读全文
摘要:题目:Nearest Common Ancestors 根据输入建立树,然后求2个结点的最近共同祖先。 注意几点: (1)记录每个结点的父亲,比较层级时要用; (2)记录层级; (3)记录每个结点的孩子,vector v[M]写在主函数里面,放在外面超时。代码:#include#in...
阅读全文
摘要:这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二:用最大堆的思想. 我暂时只实现了思路一,思路二我之后实现了会补上. 思路一...
阅读全文
摘要:好像有些大公司出过面试题:找出数组里面第N大的数,当然有点变化,但本质部分是这样的. 要求是不能排序,时间复杂度不能超过O(n^2) 思路很多,我暂时就只会快排衍生的那种.如果对快速排序不太熟悉了,建议复习 我之前讨论的快速排序. 好的,现在假设你已经熟悉了快速排序. 每轮快排,我们...
阅读全文
摘要:我用自己的语言来阐述快速排序.希望没有基础的人也能看懂. 快速排序的主要是思想是: 1.找个参考数,把比它大的数放到右边,比它小的数放到左边; 2.递归 关于找参考数,没有比较死的规定,一般取第一个,也可以取其它的,比如中间的数. 代码如下,注释比较详细.代码:#include#i...
阅读全文