题解 | #最大养牛利润#

最大养牛利润

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

知识点:贪心

思路:子问题最优解法:在满足条件的情况下,首先饲养利润最大的牛,因为牛的成本和售价已经给出

利润就是固定的,那我每次选择最大的利润,(子问题最优解)

最后,这种解法的全局最优解,就是获取最大的利润。

综上,我们只需要每次选最大的利润,就可以解决这道题

编程语言:java

如果我的思路启发了你,给个小小关注吧~

我是废江,一个从java跑到内核再准备润回java的打工人,我会持续分享从linux内核到上层java微服务等干货

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

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
        //创建排序索引
        List<Integer> indices = IntStream.range(0, profits.length)
                .boxed()
                .sorted(Comparator.comparingInt(i -> profits[i]))
                .collect(Collectors.toList());
        //应用索引规则
        int[] sortProfits = indices.stream().mapToInt(i -> profits[i]).toArray();
        int[] sortCost = indices.stream().mapToInt(i ->costs[i]).toArray();

        int ww = w,cur = sortProfits.length - 1;
        while (cur >= 0) {
            //之前思路的最优解,每次挑利润最大的
            if (sortCost[cur] <= w && k > 0) {
                //买得起!
                w = w + sortProfits[cur];//累计利润
                sortCost[cur] = Integer.MAX_VALUE;//防止重复买
                cur = sortProfits.length - 1;//买完重新挑
                k--;//可买数量-1
                continue;
            }
            cur--;
        }
        return w-ww;
    }
}

全部评论

相关推荐

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