(C++实现)笔试题:提莫问题

2019-11-15  本文已影响0人  JLGao的简书

1. 问题描述:在撸啊撸世界中,提莫的普通攻击(吹箭)自带箭毒伤害,每一次吹箭击中敌人(以下假想敌为艾希),艾希都会受到持续特定时间的箭毒伤害。但箭毒伤害不会叠加,只会把之前的持续时间结束并立即刷新开始计算持续时间。问题是给定一个提莫攻击的时间点组成的数组timeSeries,以及固定的箭毒持续时间duration,写出算法计算出艾希一共会受到多少时间的箭毒伤害。
例子:
输入:[1, 2, 4, 6], 1
输出:4
解释:提莫在时间点1攻击艾希,箭毒生效并持续了1秒到达攻击时间点2时,箭毒刷新并重计时2秒,因此一共会受到3秒伤害。
2. C++代码实现

#include <iostream>
#include <vector>
using namespace std;

int calculatePoisonedDuration(vector<int> timeSeries, int dur){
    if(timeSeries.empty() || timeSeries.size()==0 || dur <= 0)
        return -1;
    int poisonedTime = 0;
    int start = timeSeries[0];
    for(int i = 1; i < timeSeries.size(); i ++){
        if(timeSeries[i] < timeSeries[i-1])
            return -1;
        else if(timeSeries[i] >= start + dur)
            poisonedTime += dur;
        else
            poisonedTime = poisonedTime + dur - start;
        start = timeSeries[i];
    }
    poisonedTime += dur;
    return poisonedTime;
}

int main(){
    vector<int> timeSeries{1, 2, 4, 6};
    int duration = 1;
    int poisonedTimes = calculatePoisonedDuration(timeSeries, duration);
    cout << poisonedTimes << endl;
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读