面试题之找数字分析续
来源:互联网 发布:购买备案过的域名 编辑:程序博客网 时间:2024/05/12 02:15
找数字续分析
原题
一个数组A,数字出现的情况,只有以下三种:
一些数字只出现一次
一些数字出现两次
只有一个数字出现三次
请给出方法,找到出现三次的数字。
分析
这个题目和“找数字”的题目比较相似,但是解法上类似么?之前的解法是检查某一位上的1的和,是否能够被3整除,因为整数是32位的,可以开辟一个 32位大小的数组,这也是常数空间的。那么这个题目可以用这个方法来解决么?因为有不确定个数的数字出现了一次,这样可以产生的余数的种类也就比较多了。 那该怎么处理呢?
hashmap的方法被称为万金油,在牺牲了空间的条件下,很好的达到了O(n)的时间复杂度。
如果要求常数空间的解法呢?之前的文章也有讨论,快排的时间复杂度是O(nlogn),然后遍历一遍,找到连续三个相同的数字。后面这一遍遍历,可以省去,因为出现三次的数字只有一个。但总的时间复杂度仍是O(nlogn)。
是否还有其他的方法呢?有的同学给出了如下的方法:可以取得A中所有数字的乘积p,我们假设p没有溢出。这是遍历数组中的每一个元素A[i],查看 是否p % (A[i] * A[i] * A[i]) == 0,但此时,A[i]并不是最终要找到的数字,还需要遍历数组A,查看A[i]是否出现了三次。但这个方法整体的时间复杂度为O(n^2)。
上面分析了几个思路,希望能够帮助大家开拓思路,这里留给大家一个思考题目:上面这个题目,能够在时间复杂度O(n),空间复杂度O(1)的条件下完成么?如果不能怎么说明?
之前的“找数字”的题目,除了我们介绍的解法,尚有比较犀利,充满技巧的解法。那么这个题目呢?希望大家热烈的讨论,可以在微博上和我们互动。
【分析完毕】
- 面试题之找数字分析续
- 面试题之找数字分析
- 找数字面试题总结
- 面试题之缺失的数字分析
- 面试题:看数字找规律
- 面试题:看数字找规律
- 面试题:看数字找规律
- 面试题——找单独数字
- 21. 微软面试题:字符串中找最长数字字符串
- 面试题--找单数
- 面试题之寻找丢失的数字
- 面试题之寻找丢失的数字
- 面试题之寻找丢失的数字
- 面试题之陈利人 n位数字
- 2014找工之几何算法面试题
- 面试题38 数字在排序数组找那个出现的次数
- 面试题:最小数字
- 面试题之树的高度分析
- Java Annotation实例:使用Annontaion简化开发
- VS插件开发——格式化变量定义语句块
- 【开源专访】禅道创始人王春生:覆盖项目全周期,回归管理的本质
- 黑马程序员----JAVA基础1
- 烧香问题
- 面试题之找数字分析续
- javascript 动态表格的创建
- 看完一网友使用定义法计算定积分(速度与位移)的C代码而有所感
- 关于电磁隐身系统设计的思考
- 恋人分手后需要做的不是挽回而是二次吸引
- VC6.0 最新的 SDK platform sdk xp-sp2 官方下载地址 (zz)
- UVa 10161 Ant on a Chessboard (简单数学)
- win7启动文件夹路径
- VMware联网