zoukankan      html  css  js  c++  java
  • 贪心-1697. 算法学习

    2020-03-24 23:06:02

    问题描述:

    现在,你有n个任务需要做。每个任务都有对应的奖励val,这意味着你只要完成了这个任务,就能获得对应的奖励。每个任务也有一个完成期限date,你只有在期限内(<=date[i])完成了这个任务,才能获得奖励。每个任务只能被完成一次,一天最多只能做一个任务。请你合理的分配任务,以获得最多的奖励。

    样例

    样例 1:

    输入:[50,60,70],[3,1,1]
    输出:120
    解释:
    对于第1个任务,你能在第1天,第2天,第3天中选择1天去完成。
    对于第2个任务,你只能选择第1天去完成。
    对于第3个任务,你只能选择第1天去完成。
    所以,我们选择第1天完成任务3,第2天完成任务1,50+70=120。任务2无法完成。

    样例 2:

    输入:[1,5,9],[1,1,1]
    输出:9
    解释:
    对于第1个任务,你只能选择第1天去完成。
    对于第2个任务,你只能选择第1天去完成。
    对于第3个任务,你只能选择第1天去完成。
    所以,我们选择第1天完成任务3。任务1和2无法完成。

    注意事项

    0 <= n <= 10000
    1 <= val[i] <= 10000
    1 <= date[i] <= 10000

    问题求解:

        int res = 0;
        public int algorithmLearning(int[] val, int[] date) {
            int n = val.length;
            List<int[]> record = new ArrayList<>();
            for (int i = 0; i < n; i++) record.add(new int[]{date[i], val[i]});
            Collections.sort(record, (int[] o1, int[] o2) -> Integer.compare(o1[0], o2[0]));
            PriorityQueue<Integer> pq = new PriorityQueue<>();
            for (int i = 0; i < n; i++) {
                if (record.get(i)[0] > pq.size()) {
                    res += record.get(i)[1];
                    pq.add(record.get(i)[1]);
                }
                else {
                    res += record.get(i)[1];
                    pq.add(record.get(i)[1]);
                    res -= pq.poll();
                }
            }
            return res;
        }
    

      

  • 相关阅读:
    Ruby--Array
    SQL--查询相同字段的数据
    Ruby--CSV
    Ruby--String
    Git常用命令
    JS Date函数操作
    FTP命令
    Rails--%w用法[转]
    Rails--export csv
    Mysql远程访问
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12562970.html
Copyright © 2011-2022 走看看