贪心算法(1)
来源:互联网 发布:手机基站定位软件 编辑:程序博客网 时间:2024/05/30 05:14
原题:
/** * Created by gouthamvidyapradhan on 27/06/2017. * <p> * There are n different online courses numbered from 1 to n. Each course has some duration(course length) t and closed on dth day. A course should be taken continuously for t days and must be finished before or on the dth day. You will start at the 1st day. * <p> * Given n online courses represented by pairs (t,d), your task is to find the maximal number of courses that can be taken. * <p> * Example: * Input: [[100, 200], [200, 1300], [1000, 1250], [2000, 3200]] * Output: 3 * Explanation: * There're totally 4 courses, but you can take 3 courses at most: * First, take the 1st course, it costs 100 days so you will finish it on the 100th day, and ready to take the next course on the 101st day. * Second, take the 3rd course, it costs 1000 days so you will finish it on the 1100th day, and ready to take the next course on the 1101st day. * Third, take the 2nd course, it costs 200 days so you will finish it on the 1300th day. * The 4th course cannot be taken now, since you will finish it on the 3300th day, which exceeds the closed date. * <p> * Note: * The integer 1 <= d, t, n <= 10,000. * You can't take two courses simultaneously. * <p> * Solution: O(N log N) * 1. Sort the courses with earliest deadline time (Greedy sort) * 2. Maintain a max-heap of course duration. * 3. Iterate through each course and increment the total time by current course time and include this in the * max-heap created in step 2. * 4. If the total time exceeds the current course deadline then, remove the course with max duration from max-heap * inorder to accommodate the new course. */
答案:
public class CourseScheduleIII { public static void main(String[] args) throws Exception { int[][] course = {{5, 5}, {2, 6}, {4, 6}}; System.out.println(new CourseScheduleIII().scheduleCourse(course)); } public int scheduleCourse(int[][] courses) { Arrays.sort(courses, (a, b) -> a[1] - b[1]); Queue<Integer> pq = new PriorityQueue<>((a, b) -> b - a); int time = 0; for (int[] course : courses) { time += course[0]; pq.add(course[0]); if (time > course[1]) time -= pq.poll(); } return pq.size(); }}
阅读全文
0 0
- 贪心算法(1)
- 贪心算法(1)
- 贪心算法(1)
- 贪心算法1(python)
- 算法—贪心(1)
- 【贪心算法(一)】贪心算法基础
- poj 1700 贪心算法(1)
- 贪心算法实例讲解(1)
- 贪心算法专题(1)--HDU1009
- 贪心算法——(1)
- 贪心算法1
- 1浅谈贪心算法
- 贪心算法--1基础
- 贪心算法(2)
- watcher(贪心算法)
- 贪心算法(一)
- 加油站(贪心算法)
- 贪心算法(上)
- 统计学习
- 基于sqlserver的常用查询、视图、触发器、存储过程用法
- Ruby基础知识学习
- Codeforces Round #440(div2)
- 点击列表跳转网页(webView)
- 贪心算法(1)
- nodejs将word文档转为html文件(脚本)--获取word文档内容
- java.util.concurrent包中的BlockingQuene
- scrapy爬取图片
- 特征工程怎么做
- [LeetCode] 435. Non-overlapping Intervals
- 贪心算法(2)
- 基于angular实现分页工具条展示
- 51nod 1106 质数检测