华为java面试题谁来挑战(包含代码):小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样……

题目

小偷来到了一个神秘的王宫,突然眼前一亮,发现5个宝贝,每个宝贝的价值都不一样,且重量也不一样,但是小偷的背包携带重量有限,所以他不得不在宝贝中做出选择,才能使偷到的财富最大,请你帮助小偷计算一下。
输入描述:
宝贝价值:6,3,5,4,6
宝贝重量:2,2,6,5,4
小偷背包容量:10
输出描述:
偷到宝贝的总价值:15

博主写的代码


```java
/*
 * @author:小诺大人
 * @date: 2021/6/16
 */
public class Thief {
    public static void main(String[] args) {
        int[] goods = {6, 3, 5, 4, 6};
        int[] goodWeight = {2, 2, 6, 5, 4};
        int[] result = new int[goods.length];

        //获取差值
        for (int i = 0; i < result.length; i++) {
            result[i] = goods[i] - goodWeight[i];
        }

        // 根据差值从小到大排序,同时调整物品和物品重量的下标
        for (int i = 0; i < result.length - 1; i++) {
            for (int j = i + 1; j < result.length; j++) {
                //同时调整下标对应的值位置
                if (result[i] < result[j]) {
                    //调整 result
                    reArray(result, i, j);
                    //调整 goods
                    reArray(goods, i, j);
                    //调整 goodWeight
                    reArray(goodWeight, i, j);
                }
            }
        }

        int minWeight = 10;    //记录s剩余物品重量的最小值
        int sum = 0;
        int goodsSum = 0;
        for (int i = 0; i < result.length; i++) {
            if ((sum + minWeight) > 10) {
                System.out.println("\n偷取物品价值:" + goodsSum);
                break;
            }
            //重新初始化目前剩余物品的最小重量
            minWeight=10;
            for (int j = i+1; j < goodWeight.length; j++) {
                if (goodWeight[j] < minWeight) {
                    minWeight = goodWeight[j];
                }
            }
            //记录当前背包重量和物品价值
            sum += goodWeight[i];
            goodsSum += goods[i];
            //输入偷取的每个物品
            System.out.print(goods[i] + " ");
        }

    }

    private static void reArray(int[] result, int i, int j) {
        int comTemp;
        comTemp = result[j];
        result[j] = result[i];
        result[i] = comTemp;
    }
}

输出:
偷取物品:6 6 3
偷取物品价值:15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小诺大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值