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

由一个面试题引发的思考

2011-03-06 17:22 260 查看
最近找工作面试基本上都要做笔试题目,上周去了一家公司,具体名字就不说了,有一道算法题,从1+2-3+4-5+..N,要求给一个参数N,计算结果。当时看到这题的第一思路是这样的。循环遍历N个数,申明一个变量,如果当前数是偶数,就加上这个数,如果是偶数就减去这个数,最后返回这个临时变量。最后把笔试题目给技术经理看了,他说这样做没有问题,但是问我有没有考虑过这样一个问题,就是当N是一个无限大的数时,会有什么问题,当时立刻想到了性能问题,无限循环回造成程序死掉。他问我有没有其他的办法,我当时考虑了下,说有,但是需要点时间来考虑。

最后回来后研究了下,发现有规律可循,

1+2-3+4-5,可以这样看,1+(2-3)+(4-5),通过这种规律就可以用数学问题来解决了。具体的代码如下:

public int GetResult(int N)
{
int result = 0;
for (int i = 1; i <= N; i++)
{
if (i % 2 == 0)
{
result += i;
}
else
{
if (i == 1)
{
result += i;
}
else
{
result -= i;
}

}
}
return result;
}
public int GetResult2(int N)
{
int result = 0;
if (N % 2 == 0)
{
result = 2 + N / 2;
}
else
{
result = 1 - N / 2;
}
return result;
}


通过这个面试题让我感受到对待一个问题要多方面思考,不能只用一种思维模式去考虑问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: