算法
文章平均质量分 74
ivokky
这个作者很懒,什么都没留下…
展开
-
从数列1, 2, 3, ... , n 中 随意取几个数,使其和等于sum.
blog原址:http://blog.csdn.net/beiyeqingteng/article/details/7107636问题:输入两个整数 n 和 sum,从数列1, 2, 3, ... , n 中 随意取几个数,使其和等于 sum,要求将其中所有的可能组合列出来.比如n = 5, sum = 8, 那么所有的组合为:3 5 或者 1 5 2转载 2011-12-29 21:59:42 · 674 阅读 · 0 评论 -
判断链表中是否存在环问题、判断两个链表是否相交问题及其扩展
一、已知一个单链表p,如何判断它是否存在环。定义两个指针fast和slow,均初始化为p,fast一次走2步,slow一次走1步,如果两个指针在q处相遇,那么存在环,相遇的地方一定是slow一圈没有走完,fast走完一圈,在走第二圈的时候。扩展:如何知道环的长度?如何找出环的连接点在哪里?带环链表的长度是多少?记录q的位置,继续走直到再碰上q那么之间走过的距离就是环的长度;slow原创 2013-09-23 20:36:33 · 755 阅读 · 0 评论 -
Reservoir Sampling - 蓄水池抽样
问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would yo原创 2013-09-22 15:56:21 · 864 阅读 · 0 评论 -
卡特兰数
1.什么是卡特兰数卡特兰数的递归公式是:F(n)=∑(k=1,2...n)F(k-1)*F(n-k)=∑(k=0,1,2...n-1)F(k)*F(n-k+1)卡特兰数的一般公式是:F(n)=C(2n,n)/(n+1)2.推导一般公式引例: ①已知有编号为1到n的n个元素,将它们顺序入栈,请问共有多少种出栈序列? ②有一个n*n的棋盘,从左下角走到右上角而不穿原创 2013-05-03 13:01:01 · 1227 阅读 · 0 评论 -
堆排序
堆排序1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质Key[i]=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足Key[i]2.堆排序的思想利用大顶堆(小顶堆)堆顶记录的是最大关键原创 2013-05-04 14:09:43 · 509 阅读 · 0 评论 -
二叉树笔试题
转自:http://blog.csdn.net/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决转载 2013-05-03 19:30:43 · 640 阅读 · 0 评论 -
插入排序和希尔排序
一、插入排序基本思想:把一个数组划分为两部分,一个有序,一个无序,每次从无序列当中取出一个插入到有序列中的正确位置。插入排序的最优的时间复杂度是O(n), 最差的时间复杂度O(n^2) ,平均时间复杂度O(n^2),空间复杂度为O(1),是稳定排序。伪代码:for i=1 to A.length-1 key=A[i] j=i-1 while j>原创 2013-04-09 11:18:07 · 579 阅读 · 0 评论 -
归并排序
一、归并排序基本思路:利用分治法的思想,将数组分成两个数组,如果两个子数组无序,那么就继续分解,直至每组只剩一个元素,最后依次进行合并。难点在于如何将两个有序数组合并为一个。伪代码:MERGESORT(A,p,r) if p<r q=(p+r)/2 MERGESORT(a,p,q) MERGESORT(a,q+1,r) MERG原创 2013-04-09 13:25:10 · 513 阅读 · 0 评论 -
排序(一)
一、冒泡排序基本思想:每次循环将最大的值放在最后,冒泡排序最优的时间复杂度是O(n), 最差的时间复杂度O(n^2) ,平均时间复杂度O(n^2),空间复杂度为O(1),是稳定排序。伪代码:for i=A.length-1 downto 1 //这里只需到A[1],因为A[1]确定了A[0]自然就确定了 for j=0 to i-1 if A[j]>A[j+1]原创 2013-04-08 21:30:55 · 503 阅读 · 0 评论 -
冒泡排序和快速排序
一、冒泡排序基本思想:每次循环将最大的值放在最后,冒泡排序最优的时间复杂度是O(n), 最差的时间复杂度O(n^2) ,平均时间复杂度O(n^2),空间复杂度为O(1),是稳定排序。伪代码:for i=A.length-1 downto 1 //这里只需到A[1],因为A[1]确定了A[0]自然就确定了 for j=0 to i-1 if A[j]>A原创 2013-04-09 09:22:36 · 505 阅读 · 0 评论