算法
zi_jun
这个作者很懒,什么都没留下…
展开
-
每天一道算法题8 在排序数组中查找和为给定值的两个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。分析:如果我们不考虑时间复杂度,最简单想法的莫过去先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和转载 2013-01-05 22:48:16 · 873 阅读 · 1 评论 -
无序整数数组中找第k大的数
写一段程序,找出数组中第k大小的数,输出数所在的位置。【解法一】我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度都是 O(N * log2N)。然后取出前 K 个,O(K)。总时间复杂度 O(N * log2N)+ O(K) = O(N * log2N)。你一定注意转载 2013-06-09 18:41:54 · 1188 阅读 · 0 评论 -
递归算法详细分析-> C
C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那契数列用来说明递归,非常不幸我们可爱的著名的老潭老师的《C语言程序设计》一书中就是从阶乘的计算开始的函数递归。导致读过这本经书的同学们,看到阶乘计算第一个想法就是递归。但是在阶乘的计算里,递归并没有提供任何优越之处。在菲波那契数列中,它的效率更是低的非常恐怖。 这里有转载 2013-06-10 15:43:06 · 544 阅读 · 0 评论 -
判断单链表是否有环
1、如何判断一个链表是不是这类链表? 2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:boo转载 2013-06-19 10:05:38 · 687 阅读 · 0 评论 -
微软面试题:将一个句子按单词反序
描述:微软面试题:将一个句子按单词反序将一个句子按单词反序。比如 “hi baidu com mianshiti”,反序后变为 “mianshiti com baidu hi”。分析: 一般的想法,把所有的字符反转,然后把单个的单词再次反转。。。提供两种代码:纯c和stl版 View Code 1 #include 2 using namesp转载 2013-06-19 12:18:54 · 1209 阅读 · 0 评论 -
通过异或交换值
用法:void swap(int &a,int &b){ a^=b; b^=a; a^=b; }通用一点的形式是: a^b=c a^c=b 同时 b^c=a即只要直到a,b,c中的任意两个,通过异或运算就可以算出另一个。(这是磁盘位的恢复的一种手段。)原理转载 2013-06-19 12:39:42 · 786 阅读 · 0 评论