今天我听说了一个叫做codility的网站,用户可以在这个网站上进行各种编程测试来检查他们代码的性能。
当我开始的时候,他们给了我这个样本测试,
任务描述一只小青蛙想要到路的另一边。青蛙当前位于位置X,并且希望到达大于或等于Y的位置。小青蛙总是跳跃固定的距离,D。计算小青蛙为了到达目标而必须执行的最小跳跃次数。
编写一个函数:class Solution { public int solution(int X, int Y, int D); }
,它在给定三个整数X
、Y
和D
的情况下,返回从位置X
到等于或大于Y
的位置的最小跳跃次数。
例如,给定:
X = 10
Y = 85
D = 30
函数应该返回3
,因为frog的位置如下:
在第一次跳跃后,位置10 + 30 = 40
在第二次跳跃后,位置10 + 30 + 30 = 70
在第三次跳跃后,位置10 + 30 + 30 + 30 = 100
假设: X,Y和D是范围内的整数
1..1,000,000,000;X≤Y,复杂度:预计最坏情况时间
复杂度为O(1);期望的最坏情况空间复杂度为O(1)。
这个问题非常直接,我花了大约2分钟才写出解决方案,如下所示:
class Solution {
public int solution(int X, int Y, int D) {
int p = 0;
while (X < Y){
p++;
X = X + D;
}
return p;
}
}
然而,测试结果表明,我的代码的性能仅为20%
,而我的得分仅为55%
,
这是指向结果的链接,https://codility.com/demo/results/demo66WP2H-K25/
这是如此简单的代码,我只使用了一个while
循环,怎么可能使它更快呢?
https://stackoverflow.com/questions/28178460
复制相似问题