1402. 做菜顺序(Hard)

题目

题目及示例

我的题解

将所有的菜按照喜爱度从小到大排序,算出全部做出来的结果标志为base state。然后观察可以发现,每减少一道菜,结果=上次的结果-(全部菜喜爱度-减少了的菜的喜爱度)。这样就可以算出来,完全是数学解法。

    public int maxSatisfaction(int[] satisfaction) {
        Arrays.sort(satisfaction);
        if (satisfaction[satisfaction.length - 1] <= 0) {
            return 0;
        }

        int max = 0; // 最大满意度
        for (int i = 0; i < satisfaction.length; i++) {
            max += (i + 1) * satisfaction[i];
        }

        int minus = 0; // 减掉的数
        for (int j : satisfaction) {
            minus += j;
        }

        int current = max - minus;
        max = Math.max(max, current);
        for (int i = 1; i < satisfaction.length; i++) {
            minus -= satisfaction[i - 1];
            current -= minus;
            max = Math.max(max, current);
        }
        return max;
    }

总结

  • 数学解法,注意规律,注意思考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值