您的位置:首页 > 职场人生

数组,字符串相关面试题

2012-05-30 00:14 225 查看
所有的题目均采自于careercup, cracking the code interview等网站、书籍。

1. In an unsorted array of first N natural numbers. The array contains a number which is duplicated and one is missing. Find both the numbers. 一个含有前N个自然数的未排序数组,其中一个数出现了两次,一个没有出现,找出这两个数。

来源:careercup 亚马逊美国面试题 http://www.careercup.com/question?id=13729662

【解答】

首先很容易想到naive approach,新建一个大小为N的数组作为flag,时间复杂度为O(N),另外需要O(N)的space。

这里CodeCracker 利用数学方法给出了一个很好的解答。

前N个自然数的和是(n+1) n / 2,设重复出现的数是x,没出现的数是y,则输入数组的和是(n+1)*n +x - y;同样前N个自然数的平方和是 n*(n+1)(2n+1)/6,输入数组的平方和是 n*(n+1)(2n+1)/6 +x^2-y^2,于是我们可以算出 ( x - y ) 和 ( x^2 - y^2 ),进而算出x 和 y。因为需要一次求和过程,时间复杂度为O(N)。

该题解答的java代码:http://pastebin.com/ZA0VAy0y
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐