前言
程序
int findPoisonedDuration(vector<int> & timeSeries, int duration){
int begin = timeSeries[0], result = 0;
for (int v : timeSeries){
result += begin + duration >= v ? v - begin : duration;
begin = v;
}
return result+duration; // 处理最后一个中毒周期
}
分解
整体思路:
首先,我们记某个提莫设计开始的时刻为begin
如果这个开始的时刻begin+中毒的时间duration大于下次提莫投毒的时间v:
那么中毒时间res就加上从 begin开始到v的时间 (因为提莫的毒不能叠加,从begin开始只能中毒到v,从v开始又是一剂新毒液。。。);
如果这个开始的时刻begin+中毒的时间duration小于下次提莫投毒的时间v:
那么中毒时间res就加上中毒时间duration
疑惑
result += begin + duration >= v ? v - begin : duration
这个结构一开始困惑到我了。
查了查C++中的运算符的优先级:
优先级:+, >=, ?:, +=
所以这里先算 begin + duration ;再判断begin + duration >= v;再运算? v - begin : duration;如果>=号成立,那么result+=v-begin,否则result+=duration。