白天,蜗牛在墙上爬上x ft。经过一整天的劳动,它停下来休息了一会儿......但是睡着了!!第二天早上它醒来时发现它在睡觉的时候滑倒了。
如果每天都发生这种情况,蜗牛会爬到多少次覆盖不同高度的墙壁?
我编写了一个函数来计算蜗牛的蠕变数,如下所示:
void count(int move_forward, int move_backward, int number_walls, int[] height)
{
int count = number_walls, diff = move_forward - move_backward;
while (number_walls--)
for (move_backward = move_forward; move_backward < height[number_walls]; move_backward += diff)
count++;
}
工作正常。但我想知道是否还有其他方法可以解决这个问题,以进一步优化程序的速度。
答案 0 :(得分:7)
解决方案是((height-x)/(x-y))+1
,不需要循环。
蜗牛需要爬到:height-x
,这需要他((height-x)/(x-y))
天。一旦它在那里,他需要额外的一天来攀爬剩余的x。
编辑如评论中所述,此解决方案解决了每个墙的问题,您需要遍历heights
数组,并总结这些结果,从而节省您的成本至少是内环,使其为O(n),而不是O(n * h),其中n是墙的数量,h是墙的高度。
(*)注意:您可能希望保存每个墙的提醒[即蜗牛在经过这堵墙之后可以继续前进多少,并从下一个墙上减去它,依赖于任务描述...如果蜗牛每天最多可以通过一个墙,请忽略最后一条评论。 / p>