随笔分类 - 数据结构和算法
摘要:1. 渐进符号表示2. 常见函数表示1. 渐进符号2. 常见函数表示2.1 函数的单调性2.2 向下向上取整2.3 取模运算2.4 对数
阅读全文
摘要:1. 实现基本原理2 实现代码1.实现基本原理2. 实现代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindMissingNumber{//冒泡排序classBubbleSort{publicstaticvoidSort(refint[]arr){inttmp;intlength=arr.Length;for(inti=0;i<length;++i)for(intj=length-1;j>=i+1;--j){//升序排列if(arr[i]>ar
阅读全文
摘要:1. 问题陈述给定一个由n-1个整数组成的未排序的序列,其中的元素都是1到n中的不同整数,请设计一个算法在O(n)的时间内寻找到缺失的那个整数。2. 解题思路2.1 常规的思路,使用二重循环实现,但是算法的时间复杂度在O(n*n)。2.2 可以使用累加求和的方式实现。实现代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceFindMissingNumber{classProgram{staticvoidMain(string[]args){//n=5intn=5;
阅读全文
摘要:1. 问题描述给定排的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X。给出一个O(nlg(n))的算法。2. 解决思路首先对数组进行排序,如果使用归并的排序的话,算法的复杂度在nlg(n)级别,然后通过从中间相两边查找即可。3. 实现代码///<summary>///在给定的数组查找是否存在和为sum的两个元素,如果存在///函数返回true,否则false///</summary>///<paramname="arr"></param>///<paramname="sum">&l
阅读全文
摘要:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceMergeSort{classProgram{staticvoidMain(string[]args){int[]arr=newint[]{1,8,3,5};MergeSort(refarr,0,arr.Length-1);foreach(intiteminarr){Console.WriteLine(item);}Console.ReadKey();}///<summary>///归并排序///</su
阅读全文
摘要:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceInsertionSort{classProgram{staticvoidMain(string[]args){int[]arr=newint[]{1,5,3,6,2,9};intkey;intj;inttmp;for(inti=1;i<arr.Length;++i){key=arr[i];//将数值插入到合适位置j=i-1;while((j>0)&&(arr[j]>key))//升序{/
阅读全文
摘要:每日一题:查找数组中最大最小值问题描述:给定数组a1, a2, a3, ... an,要求编写函数f输出改数组的最大值和最小值。假设数组中的值两两不相同。思路:朴素的算法可以通过遍历的算法,通过2n次的比较得到数组中的最大值和最小值。实现代码如下:publicclassPair{//构造函数publicPair(intmax,intmin){this._max=max;this._min=min;}//属性privateint_max;publicintMax{get{returnthis._max;}set{this._max=value;}}privateint_min;publicint
阅读全文
摘要:每日一题:那个开关控制那盏灯?问题描述:待续。。解决:待续。。。拓展问题:使用6根相同长度的火柴拼成4个等边三角形。很快我想使用5根火柴能够拼出2个等边三角形,那么如何实现4个等边三角形?问题的关键在于突破平面的思维,想象如果是在三维的空间内?问题的答案呼之欲出。
阅读全文
摘要:每日一题:过桥问题问题描述:今天偶然在《读者》上看到了益智问题 ,试着解了一下,感觉还是很有意思,google了一下,晚上都说是微软面试题,但是我找了找,在《How to Slove it》这本书中就有提到。不知道是谁cp的谁的。好吧,说说问题:U2合唱团在17分钟内得赶到演唱会,途中必须经过一座桥,4个人从桥的同一端出发,你得帮助他们到达另外的一段,天色已经暗下来,但是他们手中仅有一个手电筒,自此最多只能有两个人过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去。手电筒是不能通过丢的方式来传递的,4个人的步行速度是各不相同的,两个人的过桥时间需要以比较慢的那个人为准。四个人A,B
阅读全文
摘要:每日一题:编写一个函数,不使用算术运算符,实现比较两个数的大小问题描述:编写一个函数f,在函数f中,不能够使用算术运算符,实现比较输入两个整数的功能。思路:1.考虑使用绝对值来实现,但是这中方法其实还是在间接地使用了算术运算符,因为在abs函数中,存在数值的判定。实现代码:int max1_large(int a, int b){ return ( (a + b) + abs(a - b) ) / 2;}int max1_small(int a, int b){ return ( (a + b) - abs(a - b) ) / 2;}
阅读全文
摘要:每日一题:给定n, 求出小于n的所有数中1的位数问题描述:给定整数 n,要求编写函数f,返回[1, n]中所有数中1的位数。例如,如果f输入10的话,函数返回2,其中1中含有一个1,10中含有一个1.思路:这里首先想到的是对于给定一个整数 i,如果分解出i的各个数位。这个算法是比较简单的,取模10,然后除10即可。实现的代码如下:// 这个函数直接输入的顺序和原来的数字// 相反的,下面使用递归的形式正序输出void integer2Bit(int i){ while(i > 0) { printf("%d", i % 10); i = i /
阅读全文
摘要:每日一题 -- 不适用变量实现c语言的strlen函数问题描述:编写一个c语言函数strlen,要求在其中不能够使用任何的变量思路:如果在函数体重不能使用变量,同时考虑到斐波那契数列的递归求解的过程,可以联想到使用“递归”来实现。实现代码:#include<stdio.h>#include<stdlib.h>//strlen实现,但是在其中不能使用任何变量intmyStrlen(char*str){if('\0'==*str){return0;}else{return(1+myStrlen(str+1));}}intmain(){char*str=&qu
阅读全文
摘要:每日一题:不适用第三个变量,实现交换两个输入参数问题描述:编写一个函数swap,输入两个参数a, b,要求函数中不能够使用第三个变量,函数输出交换之后的a和b。思路:如果程序中不能够使用另外的第三个变量的话,只能够通过所谓的“技巧"来实现。这里使用的技巧如下:a ^ 0 = a. a ^ a = 0(异或运算)实现代码:#include<stdio.h>#include<stdlib.h>//交换两个数据,但是不适用第三个变量voidswap(int*a,int*b){*b=(*a)^(*b);*a=(*a)^(*b);*b=(*a)^(*b);}intmai
阅读全文
摘要:http://itunes.apple.com/itunes-u/introduction-to-algorithms/id341597754#ls=1
阅读全文