数组,字符串相关面试题
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
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
相关文章推荐
- 鸡啄米:C++编程入门系列之二十七(数组、指针和字符串:指针变量的声明、地址相关运算--“*”和“&”)
- Java数据结构和算法总结-字符串相关高频面试题算法
- 字符串相关处理kmp,前缀数,后缀树,后缀数组,最长回文串,最长重复字串,最长非重复字串
- 字符串/数组面试题
- 经典面试题:求数组的最大子序列和;实现函数 :判断一个自负喜欢是否是另一个字符串旋转所得;杨氏矩阵中查找一个数。
- 面试题42—相关题目(字符串的左旋转)
- 字符串相关面试题(整理)
- C/C++ 学习笔记:字符串、数组相关
- 字符串与数组的相关操作
- js中数组字符串相关
- 转:编程之美 面试题精解之二: 字符串、数组(1)
- 存放字符串的指针数组相关应用
- js 面试题之---数组、字符串操作
- 面试题:数组有没有length()方法? 字符串有没有length()方法? 集合有没有length()方法?
- 字符串相关面试题
- 面试题:将一个字符串数组中的字母按照以下规则排列:表中任何单词的首字母与其前面单词的尾字母相同! 要求:字符串只由小写字母构成,且每个字符串长度在2-100之间
- C语言学习入门 (四) 字符串、字符串数组、字符和字符串相关函数
- Java面试题-字符串与数组
- 关于数组,字符串的几道面试题和算法题
- 剑指offer面试题java实现之题4之相关题目:两个排序数组合并