分析题目之后发现本题的解题思路可以是先求出数组相邻两次毒药的时间差,如果这个差值比duration要大,则在总时间上加上duration的值。若差值小于等于duration,则意味着上一次毒药效果还没发挥完就又被毒了一次,因此上一次毒药的作用时间为两次毒药的时间差,即在总时间上加上这个时间差。根据此思路写出以下代码:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int total = 0;
for(int i = 0; i < timeSeries.size() - 1; i ++){
int dif = timeSeries[i + 1] - timeSeries[i];
if(dif > duration) total += duration;
else total += dif;
}
total += duration;
return total;
}
但是提交结果为runtime error, last input 为 [ ], 100000.
发现之前没有考虑到数组为空的情况,于是加上一行判断数组是否为空:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int total = 0;
if(timeSeries.size() == 0) return total;
for(int i = 0; i < timeSeries.size() - 1; i ++){
int dif = timeSeries[i + 1] - timeSeries[i];
if(dif > duration) total += duration;
else total += dif;
}
total += duration;
return total;
}
Accepted