随笔分类 -  数据结构与算法Data Structure and Algorithm

摘要:Given a list of numbers, find the number of tuples of size N that add to S.for example in the list (10,5,-1,3,4,-6), the tuple of size 4 (-1,3,4,-6) a... 阅读全文
posted @ 2015-08-01 15:29 AndyJee 阅读(1004) 评论(0) 推荐(0)
摘要:Problem:There are three poles and N disks where each disk is heaver than the next disk. In the initial conguration, the discs are stacked upon another... 阅读全文
posted @ 2015-07-31 16:09 AndyJee 阅读(593) 评论(0) 推荐(0)
摘要:题目:八皇后问题:在8 X 8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处于同一行,同一列或者同意对角线上,求出所有符合条件的摆法。思路:1、回溯法数据结构:由于8个皇后不能处在同一行,那么肯定每个皇后占据一行,这样可以定义一个数组A[8],数组中第i个数字,即A[i]表示位于第... 阅读全文
posted @ 2015-07-24 16:23 AndyJee 阅读(1104) 评论(0) 推荐(0)
摘要:题目:输入一个字符串,输出该字符串的字符的所有组合,比如输入字符串:abc,输出a、b、c、ab、ac、bc、abc。思路:回溯法建立一个数组记录字符串中的字符出现与否,如字符串abc,int A[3],A={1,0,1},就代表字符ac。代码:#include #include using nam... 阅读全文
posted @ 2015-07-24 15:16 AndyJee 阅读(577) 评论(0) 推荐(0)
摘要:题目:给定如下图所示的无向连通图,假定图中所有边的权值都为1;显然,从源点A到终点T的最短路径有多条,求不同的最短路径的数目。注:两条路径中有任意结点不同或者结点顺序不同,都称为不同的路径。思路:给定的图中,边权相等且非负,Dijkstra最短路径算法退化为BFS广度优先搜索。实现过程中可以使用队列... 阅读全文
posted @ 2015-07-12 09:16 AndyJee 阅读(6858) 评论(0) 推荐(0)
摘要:题目: 赛诗会后,十二金钗待奔前程。分别宴上,12人各写了一首诗放入包囊。 大家随机取一个,若取到自己的诗,则再取一个,并放回自己的诗,12人都拿到诗算一种分配。 请问:共有多少种不同的分配? 思路: 问题简化:给定n个人写n首诗,要求赠给其他人,共有多少种分配方法。 通俗一点就是:1到n的全排列, 阅读全文
posted @ 2015-07-10 16:25 AndyJee 阅读(634) 评论(2) 推荐(0)
摘要:分享一篇趣文(来自伯乐在线:http://blog.jobbole.com/70395/),同样是海盗分赃问题,这篇文章以诙谐幽默的口吻以及浅显易懂的对话来解释海盗分赃问题。与上一篇博文海盗分赃_1不同的是,这里的投票规则为半数即可,并不要求大于半数。因此该问题的思路过程结果为: (3... 阅读全文
posted @ 2015-07-01 17:16 AndyJee 阅读(642) 评论(0) 推荐(0)
摘要:题目:P个海盗偷了D颗钻石后来到公海分赃,一致同意如下分赃策略:首先,P个海盗通过抽签决定1-P的序号。然后由第1号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括1号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则1号将被投入大海喂鲨鱼;而后依次类似地由第2号... 阅读全文
posted @ 2015-07-01 16:59 AndyJee 阅读(1107) 评论(0) 推荐(1)
摘要:主要内容:1、什么是堆?2、如何建堆3、堆排序4、参考代码一、什么是堆?“堆”是个很有趣的数据结构,是个完全二叉树。“堆”的特性:每个节点的键值一定总是大于(或小于)它的父节点(大于:称为“最大堆”,小于:称为“最小堆”),或者说每个节点总是大于或小于它的子节点。对于最大堆而言,根节点为最大值;对于... 阅读全文
posted @ 2015-07-01 11:32 AndyJee 阅读(740) 评论(0) 推荐(0)
摘要:Given two wordsword1andword2, find the minimum number of steps required to convertword1toword2. (each operation is counted as 1 step.)You have the fol... 阅读全文
posted @ 2015-06-26 17:22 AndyJee 阅读(809) 评论(0) 推荐(0)
摘要:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array[−2,1,−3,4,−1,2,1,... 阅读全文
posted @ 2015-06-26 14:51 AndyJee 阅读(446) 评论(0) 推荐(0)
摘要:Given amxngrid filled with non-negative numbers, find a path from top left to bottom right whichminimizesthe sum of all numbers along its path.Note:Yo... 阅读全文
posted @ 2015-06-26 09:48 AndyJee 阅读(518) 评论(0) 推荐(0)
摘要:题目:1、一个函数fun()均匀返回0和1,各自的概率是50%,利用这个函数实现一个函数,使之返回 1的概率为3/4,0的概率为1/4。2、假如有一个函数rand5能等概率生成1 - 5 之间的整数,如何利用rand5来实现rand7?rand7函数的要求是能够等概率生成1 - 7之间的整数。思路:... 阅读全文
posted @ 2015-06-25 17:19 AndyJee 阅读(1129) 评论(0) 推荐(0)
摘要:题目:一个整数组里包含0-(n-1)的排列 (0到(n-1)恰好只出现一次),如果每次只允许把任意数和0交换,求排好顺序至少交换多少次。思路:这是组合数学中的圈问题,可以把数组中的位置关系看成图的拓扑关系。例如A[3]={2,0,1},2在0的位置,0在1的位置,1在2的位置,那么把它们画成图的拓扑... 阅读全文
posted @ 2015-06-17 16:07 AndyJee 阅读(4590) 评论(2) 推荐(0)
摘要:题目:字符串只有可能有A、B、C三个字母组成,如果任何紧邻的三个字母相同,就非法。求长度为n的合法字符串有多少个?比如: ABBBCA是非法,ACCBCCA是合法的。思路:1、枚举方法:数学组合问题,枚举所有情况,然后判断是否为合法串,并统计个数。时间复杂度:O(3^n)2、动态规划:假设:dp[i... 阅读全文
posted @ 2015-06-17 14:54 AndyJee 阅读(1410) 评论(0) 推荐(0)
摘要:题目:数组中的数分为两组,给出一个算法,使得两个组的和的差的绝对值最小数组中的数的取值范围是0weight[i]另外,如果想知道是由那几件物品组成的最大价值,可以从后往前回溯,当V[i][j]>V[i-1][j],说明第i件物品被加入(路径不唯一)。代码:#include #include usin... 阅读全文
posted @ 2015-06-01 10:42 AndyJee 阅读(14669) 评论(3) 推荐(1)
摘要:题目:X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。思路:1、暴力计算依次计算两两线段之间的重叠长度,... 阅读全文
posted @ 2015-05-28 23:53 AndyJee 阅读(2957) 评论(0) 推荐(0)
摘要:题目:判断两个区间是否重叠思路:假设区间表示为[start,end],先存在两个区间A,B.两个区间的关系有两种:重叠与不重叠重叠的情况有4种,两种相交,两种包含(很容易想到,此处不示意)不重叠有两种情况:A在B前面,A在B后面因此很容易得到判断区间重叠的方法:1、正向判断,列出四种重叠的情况,满足... 阅读全文
posted @ 2015-05-28 23:00 AndyJee 阅读(25421) 评论(2) 推荐(0)
摘要:题目:给定N张扑克牌和一个随机函数,设计一个洗牌算法思路:假设数组A存的是扑克牌代表的数字,则洗牌的过程就是数组中元素交换的过程。洗牌是个随机的过程,也是一个排列组合的过程。假设有N张牌,则其排列组合的可能情况为N!=N*(N-1)*....*2*1。有两种的随机洗牌函数:1、A[i]=A[rand... 阅读全文
posted @ 2015-05-25 16:33 AndyJee 阅读(782) 评论(0) 推荐(0)
摘要:题目:若对于整数N,在集合{1,2……,N}中找出m个数,使其和等于剩下的N-m个数的和。返回所有可能的组合数,N#includeusing namespace std;#define N 8int count=0;void Sum(int *nums,vector out,int sum,int ... 阅读全文
posted @ 2015-05-25 16:05 AndyJee 阅读(605) 评论(0) 推荐(0)