数组,字符串相关面试题

所有的题目均采自于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值