两道面试题的解答,找工作的兄弟看过来~~~
感谢大家参与,问题已经解决,结贴给分!StarWing83 完整给出两道题的答案,而且第一题算法复杂度比我的好,第二题都是O(n)算持平,得分13/20 (他的算法分别在50楼,40楼)
Devil_W 的确是比较厉害的,直接看出来第一题用dp算法最好,但是没有给出完整答案,给分2/20,不过还是比较佩服他,算法水平比我好多了~~~
hahayezhe 首先看出来第二题有问题,并且提出修改方案,给分5/20表示感谢~~~
1.编写一个程序,返回两个字符串的最大公串!例如,“adbccadebbca”和“edabccadece”,返回“bccade”。
2.有个数组arr[100]存放了100个数,这100个数取自1-99(此处改为0-99),且只有两个相同的数,剩下的98个数不同,写一个搜索算法找出相同的那个数的值.(注意空间效率时间效率尽可能要低).
发现有些兄弟的代码没有经过测试就发上来,下面给个测试方法,以便大家写好代码后测试一下:
1. 编译成可运行程序a.out,测试命令: ./a.out adbccadebbca edabccadece
返字符串:bccade
2.补全下面代码中的search_same(int arr[], int n);定义,(假设arr[]中随机存0-99数字,34没有出现,58出现2次,其他数字出现1次,用search_same函数找出重复数字58)
程序代码:
#include <stdio.h> int search_same(int arr[], int n); int main() { int arr[100]; int i; for(i=0; i<100; i++){ arr[i] = i; } arr[34] = 58; fprintf(stdout, "The same one:%d\n", search_same(arr, 100)); return 0; }
我已经写了自己的代码放在附件里面,不过是加密的,过几天给密码;
给分条件,算法空间效率和时间效率比我写的更好。
code.rar
(1.46 KB)
附件密码:done!恩,请给出大致思路,以便大家更容易看懂~~~~
哈哈,没想到有这么多人回帖,先谢谢大家了。
附件密码已经发了,就在附件后面(纯白颜色的字体),请ctrl+a全选就看见了。
其实这些题是网上没事的时候搜到的,原来一共十几道,感觉这两道比较有意思,所在放上来了~~~~~
十楼的兄弟,你太强了,我看了几天咋就没想到是这么回事的呢,感叹!~~~~,说声佩服~~~(已经按照11楼的修改题目)
我的算法思路:
1.最简单的方法是一一比较,大致次数是 关于F的函数,F( strlen(str1) + strlen(str1)*strlen(str2) );想一下,有很多重复比较的,最好是扫描一次str2,然后把所有127个字符的位置存储在一个单链表数组listarr[127]中,字符的数值就是对应的数组下标;这样str1通过listarr与str2对应的字符比较,一共只需F( strlen(str1) + strlen(str2)*2 );就可以了。-----算法复杂度:最大O(n^2),空间复杂度O(n)。
2.恩,尽量少空间,所以方法如下:从头扫描数组,并用value = arr[i]%100来取元素值,然后,检查arr[value]是否大于100,如果是那就是这个数,如果不是就把arr[value] += 100;--------算法复杂度:O(n),空间复杂度:O(1),
其实原理还是做标记,但是用原来的数+100,然后用模100取值,这样做标记空间占用几乎是0。
(题目修改后这个思路同样适用)
我的代码已经发在22楼,由于题目修改,第二题稍做修改。思路就是我上面写的~~~
[ 本帖最后由 wsj3000 于 2010-5-3 12:17 编辑 ]