码迷,mamicode.com
首页 > 编程语言 > 详细

实习生面试--算法题之一

时间:2015-05-08 01:31:21      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

题目:在整型数中只有1位是1,求1在整型数中的位置?

 

通常,面试者给的答案是一位一位的右移,并判断是否移位后的值是1,如果是1,输出被移位的位数就是我们要的答案了。

 

但是这并不是最优的答案,时间复杂度是O(n)。那么更好的算法是什么样的呢,其实我们可以采用二分法更高效的解决本问题,时间复杂度是O(logn)。

 

下面给出代码,并测试时间消耗。

 

算法1

技术分享
 1 int scan(unsigned int value)
 2 {
 3     int len = sizeof (unsigned int) * 8;
 4     for (int i = 0; i < len; i++)
 5     {
 6         if (value == 1)
 7         {
 8             return i;
 9         }
10         value >>= 1;
11     }
12     return -1;
13 }
View Code

算法2

技术分享
 1 int bi_search(unsigned int value)
 2 {
 3     int len = sizeof (unsigned int) * 8;
 4     len >>= 1;
 5     int pos = 0;
 6     while (value > 0)
 7     {
 8         if (value >> len > 0)
 9         {
10             pos += len;
11             value >>= len;
12         }
13         if (value == 1)
14         {
15            return pos;
16         }
17         len >>= 1;
18     }
19 
20     return -1;
21 }
View Code

 

时间测试结果:

技术分享

可以看出算法1比算法2多了49.85%的时间开销。

 

本题目测试的是面试者是否能灵活的运用常用的基本算法,也出自于本人实际工作中。

实习生面试--算法题之一

标签:

原文地址:http://www.cnblogs.com/joluo/p/4486513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!