牛客题解 | 小球的距离
题目
解题思路
这是一个等比数列求和问题。关键点:
-
单个小球的路径:
- 下落:\(N\) 米
- 反弹:\(N/2\) 米
- 下落:\(N/2\) 米
- 反弹:\(N/4\) 米
- 下落:\(N/4\) 米
- ...直到不再反弹
-
等比数列求和:
- 第一次下落:\(N\)
- 后续每次上下:\(N + N/2 + N/4 + ...\)
- 总路程 = \(N + 2 * (N/2 + N/4 + N/8 + ...) = N + N * 2 = 3N\)
-
四个小球:
- 每个小球的路程都是初始高度的3倍
- 总路程 = \(3A + 3B + 3C + 3D\)
代码
class Balls {
public:
int calcDistance(int A, int B, int C, int D) {
return 3 * (A + B + C + D);
}
};
import java.util.*;
public class Balls {
public int calcDistance(int A, int B, int C, int D) {
// write code here
return 3 * (A + B + C + D);
}
}
# -*- coding:utf-8 -*-
class Balls:
def calcDistance(self, A, B, C, D):
return 3 * (A + B + C + D)
算法及复杂度
- 算法:数学公式
- 时间复杂度:\(\mathcal{O(1)}\),直接计算
- 空间复杂度:\(\mathcal{O(1)}\),只使用常数额外空间