2011年5月26日

上楼梯问题(转)

摘要: 某人上楼梯,一步可以上1,2,3个台阶,楼梯共10个台阶,从地面到最上层共有多少种不同走法?这个题用排列组合不好作,无法确定步骤,我提供一种方法,供大家参考借鉴:不妨设有n阶台阶,既然一次只能走一步或2步或3步,那么假设现在仅剩下最后一步要走,有三种情况:一 只需要走一步,这时已经走了(n-1)阶,走法与走n-1阶相同,有f(n-1)阶走法;二 只需要走两步,同上分析有f(n-2);三 只需要走三步,有f(n-3);所以走n阶台阶有f(n)=f(n-1)+f(n-2)+f(n-3)种走法;很明显,走1阶台阶有1种方法;走2阶有两种走法;走3阶有4种走法,如下:1 1 1 1 2 2 1 3;所 阅读全文

posted @ 2011-05-26 16:45 奋斗者 阅读(535) 评论(0) 推荐(0) 编辑

一起养动物(转)

摘要: 百度运维部推理:24个人,每人至少养一种宠物,养鸟、狗、鱼、猫的分别为13、5、10、9人,同时养鸟和狗的2人,同时养鸟和鱼、鸟和猫、鱼和猫的各为4 人,养狗的既不养猫也不养鱼。问只养一种宠物的总共几人?同时养鸟鱼猫的几人?思路一:鸟 狗 鱼 猫13 5 10 9|--2--||-----4----|--4--||--------4-------|只养鸟: x只养狗: y只养鱼: z只养猫: m鸟鱼猫一起养的:f养鸟的:x + 2 + 4 + 4 -f = 13; => x = 3 + f养狗的:y + 2 = 5; => y = 3养鱼的:z + 4 + 4 - f = 10; 阅读全文

posted @ 2011-05-26 16:21 奋斗者 阅读(445) 评论(0) 推荐(0) 编辑

Google : 计算a[0]*a[1]*…*a[n-1]/a[i](转)

摘要: 有空不防看一下这个博客:http://jonnyhsy.wordpress.com/category/algorithms-data-structure///Given an array a[n], build another array b[n], b[i] = a[0]*a[1]*…*a[n-1]/a[i]//no division can be used, O(n) time complexity见网页:http://www.ihas1337code.com/2010/04/multiplication-of-numbers.htmlLet’s define array B where 阅读全文

posted @ 2011-05-26 15:48 奋斗者 阅读(457) 评论(0) 推荐(0) 编辑

从10亿个浮点数中找出最大的1万个–很不错的一个问题(转)

摘要: 主要参考:http://www.cnblogs.com/yaozhongxiao/archive/2009/09/23/1572955.htmlhttp://hi.baidu.com/sadawn/blog/item/4fdaee2433b7ed154d088d49.html解此问题的思想:首先,发掘一个事实:如果这个大数组本身已经按从大到小有序,那么数组的前1万个元素就是结果;然后,可以假设这个大数组已经从大到小有序,并将前1万个元素放到结果数组;再次,事实上这结果数组里放的未必是最大的一万个,因此需要将前1万个数字的后续元素跟数组的最小元素比较,如果所有后续的元素都比结果数组的最小元素还小 阅读全文

posted @ 2011-05-26 15:36 奋斗者 阅读(970) 评论(0) 推荐(1) 编辑

二叉树中两个节点的最近祖先节点(转)

摘要: 一.如果数据结构为三叉链表,即含有指向父节点的指针:思想一:双重循环法Node * NearestCommonAncestor(Node * root,Node * p,Node * q) { Node * temp; while(p!=NULL) { p=p->parent; temp=q; while(temp!=NULL) { if(p==temp->parent) return p; temp=temp->parent; } } } 上面的算法实际上是将一个结点回退到父结点,每退一步,另一个结点指针将回退到不能退为止。此过程来判断它们两结点是否有共同的父母。思想二:活 阅读全文

posted @ 2011-05-26 15:31 奋斗者 阅读(4060) 评论(0) 推荐(2) 编辑

【算法面试题】寻找二叉搜索树中两个节点的最近公共祖先节点(转)

摘要: 【算法面试题】寻找二叉搜索树中两个节点的最近公共祖先节点http://geeksforgeeks.org/?p=1029给定了一个二叉搜索树中任意的两个节点的值,要你写一个c/c++程序,去找到这两个节点的最近公共祖先,你可以假定给定的值存在于二叉树的某个节点中。函数声明:int FindLowestCommonAncestor(node* root, int value1, int value)输入: 4和 14输出: 8(4和14的共同祖先有{8, 20},其中8是最近的公共祖先节点)算法:基本思想是:给定二叉树中的两个节点n1, n2(假定n1<n2), 其最近的公共祖先节点的值n 阅读全文

posted @ 2011-05-26 14:08 奋斗者 阅读(6023) 评论(1) 推荐(0) 编辑

【算法面试题】求两个相交链表的首个相交节点(转)

摘要: 有两个单向链表A和B如下图所示,他们相交于某个节点(在这个例子里为15),写一个程序把第一个交点找出来:方法1:利用两次循环foreach nodeA in listA foreach nodeB in listB if nodeB == nodeA then A and B intersect at the current node, i.e., nodeA (or equivalently nodeB)假设链表A的长度是m,链表B的长度是n,这个算法的复杂度是O(mn),不太理想。方法2:标记已经访问的节点首先对每个节点添加一个标志位bVisited,表示这个节点有没有被访问过,初始为fa 阅读全文

posted @ 2011-05-26 14:05 奋斗者 阅读(2081) 评论(0) 推荐(1) 编辑

导航