摘要:
搜狐2012.9.15校园招聘会笔试题编程题:写代码,反转一个单链表,分别以迭代和递归的形式来实现typedef struct node LinkNode; struct node { int data; LinkNode* next; }; // 返回新链表头节点LinkNode *reverse_link(LinkNode *head)LinkNode *reverse_link_recursive(LinkNode *head)真不难简单,可有些细节的东西就是不会处理。。。。⊙﹏⊙b迭代: 1 LinkNode *reverse_link_my(LinkNod... 阅读全文
摘要:
递归算法实际上是一种分而治之的方法,它把复杂问题分解为简单问题来求解。对于某些复杂问题(例如hanio塔问题),递归算法是一种自然且合乎逻辑的解决问题的方式,但是递归算法的执行效率通常比较差。因此,在求解某些问题时,常采用递归算法来分析问题,用非递归算法来求解问题;另外,有些程序设计语言不支持递归,这就需要把递归算法转换为非递归算法。将递归算法转换为非递归算法有两种方法,一种是直接求值,不需要回溯;另一种是不能直接求值,需要回溯。前者使用一些变量保存中间结果,称为直接转换法;后者使用栈保存中间结果,称为间接转换法,下面分别讨论这两种方法。1. 直接转换法 直接转换法通常用来消除尾递归和单向递. 阅读全文
摘要:
小米2013校园招聘笔试题看一眼不会做;再看一不就是求无连通图的个数么;再想了想,挫计一堆再想算了,不想了;头发短见识短。。。查,一篇文章关于并查集,还开始没看,什么光一闪,笔墨伺候。。。其实太简单了,真是见识短: 1 int myfriend(int n, int m, int* r[]) 2 { 3 int *flag,i,tmp; 4 int cnt; 5 int cnt2; 6 7 flag = (int *)malloc(sizeof(int)*n); 8 9 for (i=0; i<n; i++)10 {11 fl... 阅读全文
摘要:
源:http://blog.csdn.net/v_july_v/article/details/7974418给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)个数的组合中乘积最大的一组,并写出算法的时间复杂度。我们可以把所有可能的(N-1)个数的组合找出来,分别计算它们的乘积,并比较大小。由于总共有N个(N-1)个数的组合,总的时间复杂度为O(N2),显然这不是最好的解法。OK,以下解答来自编程之美解法1解法2 此外,还可以通过分析,进一步减少解答问题的计算量。假设N个整数的乘积为P,针对P的正负性进行如下分析(其中,AN-1表示N-1个数的组合,PN-1表示N-1个数 阅读全文