Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259026
  • 博文数量: 21
  • 博客积分: 1263
  • 博客等级: 准尉
  • 技术积分: 697
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-24 00:05
个人简介

专注于Answers Ranking, Answer Monitor和log处理。

文章分类
文章存档

2014年(5)

2012年(16)

分类: C/C++

2012-08-11 11:09:08

有n个人,要确定存不存在这样两个人,其体重和是112公斤, 能否找到一个O(N)的算法来解决此问题?有的话,说明算法是什么? 没有的话,说明原因,及最好的时间复杂度是多少?

现在大公司面试越来越多的考虑到算法方面的东西了,可能是对于产品来说一般技术壁垒太小了,核心就是比用户的忠诚度与产品的性能,而很多时候,性能与算法关系密切。

初看这题,一下子就能想到的就是对于每个人A,找一个B,B的体重是112-A就行了,这样复杂度是O(n^2)。

另一个解决方案是从找112-A这个地方来优化了,因为我们知道了A体重,有一个数组里找112-A可以二分查找,但二分查找要求有序,而排序复杂度可以为O(nlogn),这样查找的复杂度也是O(nlogn),总体复杂度还是O(nlogn),比上一个算法要好些。

还有没有更好的办法呢?对就是hash,对于hash来说查找一个元素为O(1),所以整体复杂度就是O(N)了。hash是个好办法,但是一下子要想到点上也不容易,如果题中说了体重是整数的话,那么很容易想到就是hash了,开一个112的数组,有体重在相应位置的人数加1即可,再枚举A体重,查找B体重。

所以觉得有时候就是这样,一个方法可以,换点东西其实用相同方法也可以,但是就是不能一下子想到点上。不知道还有没有其它更好的解决方案。


阅读(3550) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~