Java O(n) Solution


  • 0
    L
    public int findPoisonedDuration(int[] timeSeries, int duration) {
            int result = 0;
            int stop = 0;
            for(int time:timeSeries){
                if(stop <= time){
                    result = result + duration;
                }else {
                    result = result + (time+duration-stop);
                }
                stop = time+duration;
            }
            return result;
        }
    

    思路:
    还原一下题目,给定两个参数,一个为攻击时间点数组,另一个为攻击中毒持续时间。如果两次攻击时间点的差距大于等于中毒持续时间,则最后的总结果增加一个完整duration;如果两次攻击时间点差距小于中毒持续时间,也就是说出现了连续中毒的情况,由于不累加,并且上一次的完整中毒间隔已经加入了结果当中,那么本次连续中增加出来的时间应该为 时间point+中毒时间duration-上次计算的终止中毒时间point。
    算法如上,每次遍历攻击时间点数组后都需要调整stop的位置。
    欢迎批评指正。


Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.