代码改变世界

面试题解答

2010-04-12 22:45  JackieHan  阅读(1888)  评论(12编辑  收藏  举报

1.有两个有序整数数组,例如{1,3,5,7,9}和{2,4,6,7,8},设计一个函数使两个数组合并,并且剔除掉两个数组里重复的元素。

这题千里马的博客兄想到的解题方法应该是最优的。

 

先定一个数组,大小为两个数组的和; 

假设两个数组都是从小到大的顺序排列,先取两个数组的最小数进行比较,取最小的数放到定义的组数当中去,

再从拿掉的那数组里面取后一个元素和另外一个数组里面的最小数比较,最小的放到定义的数组当中,如果遇到相等的情况,则随便取一个数放到数组中,两遍的取数位置都要加1,

依次比较,当一个数组里面的数取完后,把另一个数组的所有数都插入到定义的数组中,完成

 

这样的算法在时间上的复杂度最低

 

2.给定一个整数数组,例如{2,4,5,6,7,8}和一个数字,例如10,请设计一个函数找出两个元素,并且使这两个数的和为给定数字,并答应出来。 

 第二题我看回复里面都没有最优的答案。

 

最优解应该是这样的

先查找数组里面的最大数,定义一个为最大数的数组,

循环给定数组,把数组里面有的数做为定义最大数组当中的下标,并把该元素的值置为1,

循环给定数组,用给数减去数组值,得到一个数值,把改数值做为下标,判断最大数组中的该位置的元素的值是否为1,如果为1,则找到答案,循环退出并打印。

 

这样最多循环了3次,时间复杂度应该是最低的,只是用了一个可能很大的数组

 

想想我日常写的代码,在优化上真的用得很少, 代码之路还很长啊!