摘要: 求两个正整数的最大公约数?设要求x,y(x>y)的最大公约数,并且有 x = k*y+b.—— x % y = b解法一:辗转相除法一个基本的方法就是辗转相除法:x与y的最大公约数就是y和b的最大公约数。算法不断递归进行,直到b的值为0,此时y的值就是最大公约数。 使用递归方法: int gcd(int x, int y) { if(x < y) return gcd(y, x); if(y <= 0) return x; return gcd(y, x%y); } 使用迭代方法:int gcd(int x, int y){ if(x < y... 阅读全文
posted @ 2012-09-12 23:14 dandingyy 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 首先,该题中一个机器中只有一个记录,如果机器出故障,就缺失了该ID记录的一个备份。 这个问题实际上与在10亿个数中找出只出现零次,一次,两次,N次......的问题相同。(在《编程珠玑》第二章中遇到过寻找在文件中出现过0次的数的问题) 并且我们知道有如下假设:1)10亿个ID一定每个都出现过;2)大部分ID的出现次数与备份数有关;3)小部分出现0次或1次的ID一定就是该ID对应的机器出现了故障解法一:普通的遍历搜索方法。 使用一个10亿长的数组 a[N],遍历得到的ID列表,出现了一次ID,就将对应的a[ID]++,最后值为1的项就是要寻找的ID。——时间复杂度和空间复杂度均为O(N... 阅读全文
posted @ 2012-09-12 12:30 dandingyy 阅读(440) 评论(0) 推荐(0) 编辑