Java 题解 | #最大养牛利润#

最大养牛利润

https://www.nowcoder.com/practice/c12d61e3126a4f59a9587d056fb41fdb

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param k int整型
     * @param w int整型
     * @param profits int整型一维数组
     * @param costs int整型一维数组
     * @return int整型
     */
    public int findMaximizedProfits (int k, int w, int[] profits, int[] costs) {
        // write code here
        int temp = w;
        List<Pair<Integer, Integer>> cows = new ArrayList<>();
        PriorityQueue<Integer> q = new PriorityQueue<>(Collections.reverseOrder());
        int n = profits.length;
        for (int i = 0; i < n; ++i) {
            cows.add(new Pair<>(costs[i], profits[i]));
        }
        Collections.sort(cows, Comparator.comparingInt(Pair::getKey));
        int cur = 0;
        for (int i = 0; i < k; ++i) {
            while (cur < n && cows.get(cur).getKey() <= w) {
                q.add(cows.get(cur).getValue());
                cur++;
            }
            if (!q.isEmpty()) {
                w += q.poll();
            } else {
                break;
            }
        }
        return w - temp;
    }

    static class Pair<K, V> {
        private final K key;
        private final V value;

        public Pair(K key, V value) {
            this.key = key;
            this.value = value;
        }

        public K getKey() {
            return key;
        }

        public V getValue() {
            return value;
        }
    }
}

编程语言是 Java

该题考察的知识点包括:

  • 使用类:创建自定义的 Pair 类来存储键值对。
  • 数组和集合操作:使用数组和集合来存储和操作数据。
  • 优先队列:使用优先队列(最大堆)来根据利润选择最优的任务。

代码的简短文字解释:接收整数 kw 以及两个整数数组 profitscosts 作为输入。目标是在满足资源和任务限制的情况下,选择任务以最大化利润。代码首先将任务的成本和利润按照成本进行排序,然后使用优先队列来选择当前可执行的任务并将其利润加入总利润中,最终返回最大化的利润。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务