力扣每日一题2021-12-14困难题:课程表III


630.课程表III

题目描述

课程表III


思路

贪心

按结束时间排序,可以保证先考虑加入先结束的课程。
在课程塞满时,用当前的(如果耗时更短)替换耗时最长的那一个。

Python实现

Python实现

class Solution:
    def scheduleCourse(self, courses: List[List[int]]) -> int:
        pq, t = [], 0
        for duration, lastDay in sorted(courses, key=lambda x:x[1]):
            if t + duration > lastDay and pq and -pq[0] > duration:
                t += heapq.heappop(pq)
            if t + duration <= lastDay:
                heapq.heappush(pq, -duration)
                t += duration
        return len(pq)
Java实现

Java实现

class Solution {
    public int scheduleCourse(int[][] courses) {
        Arrays.sort(courses, (a,b) -> (a[1] - b[1]));
        PriorityQueue<Integer> pq = new PriorityQueue<>((a,b)->(b-a));
        int t = 0;
        for(int[] course: courses){
            if(t + course[0] > course[1] && pq.size() > 0 && pq.peek() > course[0])
                t -= pq.poll();
            if(t + course[0] <= course[1]){
                t += course[0];
                pq.offer(course[0]);
            }
        }
        return pq.size();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值