算法
文章平均质量分 70
china_wanglong
这个作者很懒,什么都没留下…
展开
-
计数排序
#includevoid printArr(int a[], int length){ int i; for(i=0;i<length;i++) printf("%d, ",a[i]); printf("\n");}void counting_sort(int a[],int length, int b[]){ int c[6],i;原创 2012-10-01 17:13:01 · 440 阅读 · 0 评论 -
Word Maze(单词迷宫)
Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。 但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。如下图,指定W为“SOLO”,则在地图中红色标注了单词“SOLO”。原创 2014-03-21 10:33:36 · 8127 阅读 · 2 评论 -
精妙的Morris二叉树遍历算法
Morris 遍历,使用无堆栈,O(1) 空间进行二叉树遍历。它的原理很简单,利用所有叶子结点的右指针,指向其后继结点,组成一个环,在第二次遍历到这个结点时,由于其左子树已经遍历完了,则访问该结点。算法伪码:MorrisInOrder(): while 没有结束 如果当前节点没有左后代 访问该节点 转向右节原创 2013-09-02 10:40:10 · 2296 阅读 · 0 评论 -
求两个单链表的和
题目两个单链表(singly linked list),每一个节点里面一个0-9的数字, 输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list 长度相等。 要求是:1. 不用递归。2. 要求算法在最好的情况下,只遍历两个list一次, 最差的情况下两遍。实现代码:public class AddSinglyLinkList {原创 2013-07-27 19:46:51 · 546 阅读 · 0 评论 -
忘我之乘积
题目:给你一个数组A[1..n],请你在O(n)的时间里构造一个新的数组B[1..n],使得B[i]=A[1]*A[2]*...*A[n]/A[i]。你不能使用除法运算。解法1;构建两个新的数组:C和D(为了方便解释,用了两个数组),C[i] = A[0]*…*A[i-1] = C[i-1]*A[i-1] D[i] = A[i+1]*…*A[n]原创 2013-07-31 20:20:37 · 678 阅读 · 0 评论 -
蓄水池抽样(Reservoir Sampling)问题
蓄水池抽样(Reservoir Sampling)问题分析问题:要求从N个元素中随机的抽取k个元素,其中N无法确定。这种应用的场景一般是数据流的情况下,由于数据只能被读取一次,而且数据量很大,并不能全部保存,因此数据量N是无法在抽样开始时确定的;但又要保持随机性,于是有了这个问题。所以搜索网站有时候会问这样的问题。这里的核心问题就是“随机”,怎么才能是随机的抽取元素原创 2013-07-30 22:13:38 · 1019 阅读 · 0 评论 -
多数算法(Majority Algorithm)
当一个序列中存在一个占大多数的的元素的时候(超过50%),该算法可以在O(1)空间和O(n)时间内找出这个元素。步骤:假设我们一开始从数组的开头,碰到某个元素的时候,就设置该元素为当前元素。当前出现的次数为1,后面,如果接着碰到的元素和该元素相同,则当前次数加1,否则减1。如果当前出现的次数为0,则表示当前元素不确定。如果结合我们有大多数元素这个前提的话,必然最后的结果是大于0的,而且最终原创 2013-07-29 16:41:19 · 5862 阅读 · 1 评论 -
2013 编程之美挑战赛 集会
时间限制: 2000ms 内存限制: 256MB描述在一条河的一侧,分布着 N 个村庄。这些村庄平日里需要一些贸易往来,然而商人们来回走遍每一座村庄是非常辛苦的,于是他们决定每个月都在河边举行一次集会,大家都来集会上购买需要的物品。然而在集会地点的选择上,大家却有分歧,因为谁都不愿意集会的地点离自己村庄非常远。经过一番激烈的讨论之后,大家决定要将集会地点挑选在这样一个位置:原创 2013-04-15 15:36:07 · 600 阅读 · 0 评论 -
2013微软编程之美预选赛
题目一:传话游戏时间限制: 1000ms 内存限制: 256MB描述Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听原创 2013-04-06 22:18:52 · 561 阅读 · 0 评论 -
今天花一上午时间写的快速排序算法,自己娱乐了
#includevoid printA(int a[],int len){ int i; for(i=1;i<=len;i++) printf("%d ",a[i]); printf("\n");}//版本1void quickSort(int a[],int left, int right){ if(left<right){原创 2012-09-24 11:13:11 · 494 阅读 · 0 评论 -
堆排序算法的C语言版本
自己实现的堆排序算法的C语言实现#includeint parent(int i){ return i/2;}int left(int i){ return 2*i; }int right(int i){ return 2*i+1; }void printA(int a[], int length){ for(int i = 1; i<=原创 2012-09-21 22:49:33 · 508 阅读 · 0 评论 -
快速选择算法的一个简单实现
#include//交换两个元素void swap(int *a, int *b){ int temp; temp = *a; *a = *b; *b = temp;}//三数取中void median3(int a[], int left, int right){ int middle = (left+right)/2; if(a[lef原创 2012-10-02 16:24:42 · 600 阅读 · 0 评论 -
地铁换乘(华为机试样题)
题目简介:描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A1原创 2014-03-21 22:00:04 · 2937 阅读 · 2 评论