题意分析
- 需要在每一天至少发射M枚炮弹。
- 在进行交接的时候必须至少有一个系统可以正常发射。
- 每个系统发射的时间为A天,冷却的时间为B天。
- 问至少需要部署多少个导弹系统可以保证符合上述要求。
思路分析
- 首先,我们发现可以把A+B看作是一个周期,因为这个周期过后之前冷却的有可以继续使用了,相当于进入了下一个新的周期。
- 然后,我们对A和B的情况进行分类
- A<B
- A=B
- A>B
- A<B
写法一
经过上面的分析,我们的问题就迎刃而解了。
代码如下
- 直接得到答案,时间复杂度为O(1)
- 没有开多余的空间,空间复杂度为O(1)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型 可以连续发射A天 * @param B int整型 需要连续冷却B天 * @param M int整型 每天至少需要发射M粒导弹 * @return int整型 */ int solve(int A, int B, int M) { // write code here if(A==B){ return 3*M; }else if(A>B){ return M*2; }else{ int tmp=(B/A); return M+(tmp+1)*M; } } };
写法二
我们继续对第一种写法进行分析。我们发现,其实分析A<B的情况的时候我们就可以得到所有的情况。根据A<B的分析方法具有普遍性。所以我们可以一个公式表示最后的结果
代码如下
- 直接计算公式,时间复杂度为
- 基本没有开多余空间,空间复杂度为
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型 可以连续发射A天 * @param B int整型 需要连续冷却B天 * @param M int整型 每天至少需要发射M粒导弹 * @return int整型 */ int solve(int A, int B, int M) { // write code here return (B/A+2)*M; } };