Course Schedule III

http://www.lintcode.com/zh-cn/problem/course-schedule-iii/

package com.LintCode.CourseSchedule3;

import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;

public class Solution {
    /*
     * @param : duration and close day of each course
     * @return: the maximal number of courses that can be taken
     */
    public int scheduleCourse(int[][] courses) {
        // write your code here
        Arrays.sort(courses, new Comparator() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });
        //按照课程结束时间排序。
        PriorityQueue queue = new PriorityQueue<>(Comparator.reverseOrder());
        int currentTime = 0;
//        记录当前的时间
        for (int[] temp :
                courses) {
            int costTime = temp[0];
            int deadLine = temp[1];
            currentTime += costTime;
            queue.add(costTime);
//            把要花费的时间加入队列和时间上
            if (currentTime > deadLine) {
//                超期了,要取消一门课。
                Integer poll = queue.poll();
//                取消时间最长的那门课,两种情况,如果刚加入的最长,就取消它,
// 如果它不是最长,取消的课程长度一定比它大,所以它一定可以修完
                currentTime -= poll;
            }
        }
        return queue.size();
    }
}

你可能感兴趣的:(Course Schedule III)