Java 题解 | #训练聪明的牛II#

训练聪明的牛II

https://www.nowcoder.com/practice/79f86360f2894f76b88d33b28a5d09b8

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param weights int整型一维数组
     * @param totalWeight int整型
     * @return int整型
     */
    public int minEatTimes (int[] weights, int totalWeight) {
        // write code here
        int[] f = new int[totalWeight + 1];
        Arrays.fill(f, totalWeight + 1);
        f[0] = 0;

        for (int i = 1; i <= totalWeight; i++) {
            for (int weight : weights) {
                if (weight <= i) {
                    f[i] = Math.min(f[i], f[i - weight] + 1);
                }
            }
        }

        return f[totalWeight] > totalWeight ? -1 : f[totalWeight];
    }
}

Java代码

这道题考察的是动态规划知识点。

代码通过动态规划的思想来解决背包问题,即计算达到每个重量所需的最小次数。其中,weights是物品的重量数组,totalWeight是需要达到的目标重量。代码使用二维数组f表示达到每个重量所需的最小次数,初始值为totalWeight + 1f[0]为0,表示重量为0时不需要任何次数。通过两层循环遍历每个重量和每个物品的重量,如果物品的重量小于等于当前重量,更新f[i]为较小的值(f[i]f[i - weight] + 1)。最后返回f[totalWeight]作为最终的结果,如果结果大于totalWeight,表示无法达到目标重量,返回-1。

全部评论

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务