您的位置:首页 > 职场人生

面试题目分析

2013-10-24 20:20 211 查看
1、实现一个函数,对一个正整数n,算得到1需要的最少操作次数。操作规则为:如果n为偶数,将其除以2;如果n为奇数,可以加1或减1;一直处理下去。

例子:

func(7) = 4,可以证明最少需要4次运算

n = 7

n-1 6

n/2 3

n-1 2

n/2 1

要求:实现函数(实现尽可能高效) int func(unsign int n);n为输入,返回最小的运算次数。给出思路(文字描述),完成代码,并分析你算法的时间复杂度。

答案:

//实现一个函数,对一个正整数n,算得到1需要的最少操作次数
//思路 1 举例子 发现规律 递归方式  特点 返回个数
//      2 非递归方式  定义一个全局 记录操作的次数
// 性能分析:o(n)
int getOperCountx(unsigned int n)
{
if(n==1)
{
return 0; //退出条件
}
if(n%2==0)
{
return 1+getOperCountx(n/2);//一个操作 /2操作
}else if(n+1>n-1)
{
return 1+getOperCountx(n-1);//一个操作 -1操作
}else
{
return 1+getOperCountx(n+1);//一个操作 +1操作
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题