
算法
文章平均质量分 50
Asuler0331
这个作者很懒,什么都没留下…
展开
-
牛顿迭代法
创新工厂的笔试题:不用库函数sqrt(),求一个整型数N的开方,要求精度达到0.001即可。在这里首先介绍一下牛顿迭代法:假设一个方程为f(x) = 0;那么假设其解为x0,则用泰勒级数展开之后可得:f(x) = f(x0) + f'(x0)(x - x0) = 0其中x为其近似解。根据上式推导出:x = x0 - f(x0) / f'(x0)这是一原创 2013-09-16 21:40:56 · 1034 阅读 · 0 评论 -
N个通信兵的问题
原题是: 总共有N个通信兵,各携带不同的信息。每两个通信兵之间通信一次可以知道对方所知道的信息。问最少需要多少次才能让所有的通信兵知道全部的信息。比较容易想到的一种方法就是:先将全部信息汇总到一个人身上,再让这个人将全部信息分别告诉其他人。我们假设这个为“服务器模式”用这种方法的话,第一次汇总耗费次数N-1,能够有2个人知道全部的信息。再分散的过程耗费次数N-2,总耗费次数为2原创 2013-10-05 16:58:50 · 906 阅读 · 0 评论 -
荷兰国旗问题
题目是:要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表蓝色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其次,B排在最后。为荷兰国旗问题设计一个算法,其时间复杂度为O(n)这道题想了相当久。要求时间复杂度是O(n),肯定只能用简单排序,然后在思想上加以改进。既然只有三种值,那么很容易就能遇到最大和最小值,这种情况下考虑使用头尾双向标记原创 2013-10-05 17:00:02 · 3054 阅读 · 1 评论 -
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
题目:已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。由于(rand7()-1)*7+ran转载 2013-09-21 00:59:11 · 702 阅读 · 0 评论 -
逆序数递归算法
爱奇艺笔试题:逆序数是很常见的一个概念了。大致内容如下:给你一个数组,假设如果同时存在i r[j],那么表明此数组有一个逆序数对。需要你写出算法来求一个数组中所有逆序数对的个数之和。void inversionMerge(int r[], int inv[], int beg, int end, int &cnt) { int mid = beg + (end - beg) /原创 2013-09-29 02:43:16 · 1623 阅读 · 0 评论 -
在O(n)时间复杂度O(1)空间复杂度求一个数组中出现多次和未出现的数字
爱奇艺笔试题:原题是:已知一个数组A[],大小为N,其中每个数都为1~N,请求出该数组中未出现的数字和出现多次的数字。要求是时间复杂度为O(N),空间复杂度为O(1)这道题的关键点就在于空间复杂度为O(1),本来想到的2-bitmap因为这点也不能实现了。解法一:这是我自己考试时想到的,利用每个数都为1~N的特点,可以将A[I]与A[A[I] - 1]进行交换,原创 2013-09-29 02:57:44 · 1140 阅读 · 0 评论