- 博客(77)
- 资源 (21)
- 收藏
- 关注
原创 在csdn学院开了一门课 欢迎指教 谢谢
算法入门级别课程,有时间就会更新—— 一周至少更新一次。初次开课,请多关照。目的是 : 分享数据结构和算法的心得体会。大家一起讨论,愉快共同进步。欢迎指教,谢谢。课程链接不想照本宣科,多讲自己的一些感触和领悟。
2015-04-06 06:31:55
4564
3
原创 Codility上的练习 (15)
(1) NumberSolitaire一个游戏是从一排N个格子开始,格子编号0..N - 1,起初,棋子在A[0],每个格子里有一个整数(可能正,可能负)。你在格子I,你扔骰子,得到点数X = [1..6],然后走到编号为I + X的格子,如果这个格子不存在就再投一次骰子,直到I + X号格子存在。你走到N - 1号格子时,游戏结束。你所经过格子里的整数的和是你的得分,求最大可能得分?数据范围:
2014-12-10 07:59:50
4797
原创 Codility上的练习 (14)
(1) TieRopes给定n段绳子——一个正整数数组,和一个正整数K,每次只能连接相邻的两根绳子,连接好了绳子长度为之前的绳子长度和,并且位置不变,问这么连接下去,最多能形成多少根长度至少为K的绳子?数据范围: N[1..10^5], 数组元素和K的范围[1..10^9]。要求复杂度: 时间O(N), 空间O(1)。分析: 假设最终扔掉一根绳子,那么为什么不把这根绳子连接到它相邻的绳子上呢? 所
2014-12-10 07:18:00
3826
原创 Codility上的练习 (13)
(1)AbsDistinct给定一个按非递减顺序排好顺序的非空整数数组,问里面右多少种不同的绝对值。数据范围:整数数组长度[1..10^5], 整数范围[-2147483648, +2147483647]。要求复杂度 : 时间O(N),空间O(1)分析: 题目不难…… 但是细节很重要。因为整数直接取绝对值可能回溢出(例如-2147483648),而且我们没有额外空间hash。所以一个好办法是类似合
2014-12-10 06:50:08
3860
原创 Codility上的练习(12)
(1) MinMaxDivision给定一个非负整数数组,每个整数都是[0..M]之间的,你要把它分成K段,(切K - 1刀),段可以为空,每个元素必须属于一段,每段必须包含0个或者多个连续的元素,要求分好和最大段的和尽量小,返回这个尽可能小的最大和。数据范围 :N, K [1..10^5], M [0..10^4]要求复杂度 时间 O(N * log(N + M)) 空间 O(1)。分析:典型的
2014-12-10 05:18:10
6808
原创 Codility上的练习(11)
(1)Ladder给定两个等长的数组A和B, A[i]和B[i]表示求一个有A[i]级的梯子,每次上1级或者两级,上到最高级的方法数对2^B[i]取余数的结果。数据范围:数组长度 L [1..30000] , A中数字范围 [1..L], B中数字范围[1..30]要求复杂度 时间空间都是O(L)分析:打表法——我们循环可以把0..L的结果都算出来 f[i] = f[i - 1] + f[i -
2014-12-09 23:49:05
4507
原创 Codility上的练习 (10)
(1)ChocolatesByNumbersN块巧克力,从0到N - 1编号,排成一个圈。从0号开始吃,如果上一次吃了x号,这一次吃(x + M) % N号,如果该号码已经存在,则停止。问结束前,吃了多少块巧克力?数据范围M ,N [1..10^9]要求复杂度 时间O(log(M + N)) 空间O(1)分析: 可以证明吃巧克力必然形成一个从0号开始的圈。因为0, M % N, M * 2 %
2014-12-09 09:17:42
3169
原创 Codility上的练习 (9)
(1) CountSemiprimes半质数的定义是恰好两个质数(可以相同)乘积的数,例如 4, 6, 9, 10, 14, 15, 21, 22, 25, 26,都是半质数。给定N,长度为M的等长整数数组P和Q,满足1 ≤ P[K] ≤ Q[K] ≤ N, 求每个区间[P[k], Q[k]]之间有多少个半质数。函数头部:vector solution(int N, vector &P, vect
2014-12-09 03:01:16
3508
原创 Codility上的问题 (40)Sulphur 2014
给定n个绳子,每个绳子编号0..N - 1。每个绳子下面挂一个重物,每个绳子另外一端(不挂重物的那端),可以挂在其他的绳子上,也可以挂在顶端(只有一个顶端),这些绳子形成一个树。树的结构由数组A,B,C,给出。其中A表示绳子的承受力,如果挂载绳子下的总重量大于绳子的承受力,绳子会断。B表示绳子一端挂的重物的重量,C表示该绳子另外一端挂的绳子的编号(C[i] 例如: A[0] = 5
2014-12-07 15:45:53
3287
原创 Codility上的问题 (40) Phosphorus 2014
感觉这个题很难,之前想了很久,一个tree-dp。题目大大意:(N + 1)个点,N条边的树。边代表走廊,节点代表监狱。但是监狱门都开了,有些节点有罪犯,他们可以沿着树边(走廊)任意移动,如果他们至少有一个人能走到叶子节点,他们就越狱了。你需要安排M个狱警,他们只能被安排再树节点上,并且这些节点最开始是没有罪犯的。狱警不能移动,罪犯走到叶子的路径上的节点如果有狱警,他就无法通过该节点,求至少要几个
2014-12-05 07:42:31
3033
原创 Codility上的问题(39) Silicium 2014
切蛋糕问题:一个矩形的蛋糕,长为X,宽为Y,沿着X和Y轴各切了刀,形成(N + 1) ^ 2 小块。求面积第K大的块的面积。函数头部:int solution(int X, int Y, int K, vector &A, vector &B);数据范围:N [1..40000];X, Y [2..4 * 10 ^ 8]相邻两刀之间的距离(包括刀和边界的距离)要求复杂度时间: Nlog(N +
2014-12-05 05:44:55
2615
原创 一本好看的书————《反欺骗的艺术——世界传奇黑客的经历分享》
参加了csdn举办的活动,我有幸得到了这本书——《反欺骗的艺术——世界传奇黑客的经历分享》。该书的作者可谓大名鼎鼎(曾经臭名昭著),他叫米特尼克,号称世界头号黑客。曾经有着“显赫的战功”,曾经是历史上最令FBI头痛的计算机顽徒之一。刚刚拿到这本书的时候,觉得这是一本写黑客供方技术的书籍。仔细读了几页发现书中讲了黑客技术中“人的因素”。的确,目前的技术的发展趋势,让我们越来越重视技术
2014-09-19 13:30:02
6349
原创 codility上的问题(38) Aluminium 2014
这是目前codility的最新challenge,貌似还没结束。题目说了一大堆,简单来说就一句话,在一个shu z允许交换两个元素的位置
2014-07-04 17:26:28
4912
原创 codility上的问题 (36)Natrium 2014
这个题比较简单,好像也比较old,给定一个整数数组A,有N个元素,找到所有下标对(P,Q)满足 0 ≤ P ≤ Q 数据范围N [1..3*10^5]数组元素[-10^9, +10^9]要求时间复杂度O(N),空间复杂度O(N)。分析: 如果b[i] = max{a[i..N - 1]} ,则对每个i,我们找到最大的j,满足b[j]>=a[i],就可以了。这样做的目的是b,反映了后面还有没有比a
2014-07-04 16:23:15
1802
原创 codility上的问题(34) Fluorum 2014
好久没写codility的题了,一来没时间,二来有的题目不太好分析。这个题比较有意思,我还没有给出非常严格的证明。给定一棵树(无向无环图),从一个节点出发,每次选择一个节点,从起点到目的节点的路径上没经过的节点尽可能多,直到遍历完所有的节点。如果起点到两个目的节点的路径中没经过的节点同样多,则选择标号较小的节点作为目的节点。如此继续,直到遍历所有的节点,求按顺序选择了哪些目的节点?例如从2 开始,
2014-07-04 11:41:54
2642
原创 codility上的问题(33) Oxygenium 2014
2014年第一个问题。问题描述很简单,给定一个整整数组A,问A有多少个段(下标对)i数据范围 :数组元素个数N [1..10^6]K [0..10^9]数组元素值范围: [-10^9,+10^9]要求:时间复杂度和空间复杂度都是O(n)。分析:注意如果(i,j)满足条件,那么(i+1,j) (i+2,j)....都满足条件,所以满足条件的对子随着i的递增,j可以不减小…… 于是就是单调队列,维护i
2014-04-15 13:17:02
2191
原创 codility上的问题(32) Nitrogenium 2013
好久没写,积累了很多……codility的题最近难度增高了一些,有些还是阅读理解……比如说这个题,给定数组A,表示每个点的高度。起初所有的点都是连接在一起的。还有一个数组B,表示水面的高度。如果水面高度大于等于某点高度,则这个点在水面下。问每天在水面上的点有多少个连通区域。(一个连通区域就是一条线段,全在水面上,他称为岛屿)举例: A[0] = 2 B[0] = 0 A[1] = 1
2014-04-15 11:07:06
2645
原创 codility上的练习(7)
codility都练习都到8了,先写7吧。这次题目比较简单,都是最大子段和相关的。(1) Max-slice-sum最大子段和 元素个数n [1..10^5],数组元素个数[-10^6,+10^6],保证最终结果32bit整数内。要求时间复杂度O(n),空间复杂度O(1)。解:// you can also use includes, for example:// #include int
2013-12-22 23:23:19
5703
原创 Codility上的练习 (6)
codility新出了lesson 6。两道题都是关于众数的。(1) Dominator就是找数组中出现次数大于一半的数。数据范围 数的个数 N [0..10^6], 数组里地整数范围[-2147483648, +2147483647],要求复杂度时间O(N),空间O(1)。经典找众数的方法,区别在于众数不一定存在,所以还得检查一下找到的那个数是不是真正的出现次数大于一半。返回的是众数的一个下标
2013-11-17 23:20:01
2787
原创 codility上的练习 (4)
(1) 给定一个数组A,N个整数,问是否能组成三角形,即是否存在 0 A[P] + A[Q] > A[R],A[Q] + A[R] > A[P],A[R] + A[P] > A[Q].数组里地数都是整数,有整有负N 范围[0..10^5], 数组中数的范围[-2147483648,+2147483647]要求复杂度 时间O(NlogN),空间O(N)函数头部int solution(const v
2013-11-16 13:34:36
2704
原创 codility上的问题(30) Boron 2013
题目有个背景,但是本质如下,一个数组有N个数,首先先要找到所谓的局部最大值,也就是说,如果数组a下标范围是[0..N-1],局部最大值的下标x在[1..N - 2]内,并且a[x] > a[x - 1], a[x] > a[x + 1]。先要找到这样的下标index,假设我们形成这样一个index数组,然后求一个K值,从index数组找出K个数,任意两个数的差距都要>=K,求这个最大的K值。需要注
2013-11-16 13:27:20
2768
原创 字符串包含问题
假设这有一个各种字母组成的字符串A,和另外一个字符串B,字符串里B的字母数相对少一些。什么方法能最快的查出所有小字符串B里的字母在大字符串A里都有?比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPO答案是true,所有在string2里的字母string1也都有。 如果是下面两个字符串: String 1: ABCDEFGHLM
2013-10-29 11:06:57
1781
原创 字符串循环左移
左旋转字符串问题题外话:话说这个问题早在40多年前就被人搞得非常通透了。《编程珠玑 (第二版)》第二章最开头问题B也讲了……好好看书很重要。这个东西是比较老的问题了,1971年就被一个做编辑器的人研究透了(《编程珠玑(第二版)》上面写的) ……现在还在作为面试题出现。给定长度为n的字符串,例如n = 6 abcdef, 左移动一位的话变为 bcdefa ,移动两位的话变为cdefab,问左移动m位
2013-10-29 10:52:06
5876
3
原创 codility上的练习(3)
今天发现又出了lesson 3...不过题目都很简单……(1) Min-avg-slice 给定一个长度为n的整数数组,找到一个连续的子数组,数组元素的平均值最小。 数据范围N [1..10^5],数组元素范围[-10^4, +10^4]。要求复杂度: 时间O(N),空间O(N)。分析: 就是求最小值……因为如果拉进别的数,平均值会增大,干嘛搞成这样,空间可以O(1)。说得神乎其神的……代码:1.
2013-09-17 17:54:00
4882
原创 codility上的练习(2)
codility新增了练习lesson 2。有三个题:(1) Perm-Check给定整数数组有N个数,问它是不是1-N的一个排列,也就是说是否每个数都是1-N,并且只出现一次。输出1和0表示是与否,输入范围N [1..10^5],数组里地整数[1..10^5],要求复杂度时间空间都是O(N)。分析:空间复杂度O(N)的算法很简单,我们可以建立一个bool数组表示1-N,每个数是否
2013-09-07 12:30:29
5176
原创 codility上的练习 (1)
codility上面添加了教程。目前只有lesson 1,讲复杂度的……里面有几个题, 目前感觉题库的题简单。tasks:Frog-Jmp:一只青蛙,要从X跳到Y或者大于等于Y的地方,每次跳的距离为D,问至少跳几次。 X,Y,D都是[1..10^9]的整数。要求时间空间复杂度O(1)。这个题比较简单,就是做除法嘛,我们不知道X是否已经不小于Y了,我加了个判断,不过也就一句话。
2013-09-01 09:55:33
17504
原创 关于完美洗牌问题的若干思考
前面学习了完美洗牌问题 完美洗牌算法学习又写了一个证明完美洗牌问题的证明进一步思考了其他的一些问题:完美洗牌问题: 给定的输入a1, a2, a3, ……aN, b1,b2,……bN,输出b1,a1,b2,a2,b3,a3…… bN,aN(1) 如果要求输出是a1,b1,a2,b2……aN,bN怎么办?这个问题在学习的时候已经考虑过,只是觉得如果先把a部
2013-08-29 18:10:55
5075
常用不等式.part3.rar
2009-11-13
常用不等式.part2.rar
2009-11-13
graph theory 1336-1936
2009-11-13
Modern graph theory
2009-11-13
TCP IP Sockets in C Practical Guide for ProgrammersSecond Edition
2009-11-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人