【LeetCode:1276. 不浪费原料的汉堡制作方案 | 数学】

在这里插入图片描述

算法题

算法刷题专栏 | 面试必备算法 | 面试高频算法
越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
作者简介:硕风和炜,CSDN-Java领域新星创作者,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享
恭喜你发现一枚宝藏博主,赶快收入囊中吧
人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?

算法题

在这里插入图片描述

【LeetCode:1276. 不浪费原料的汉堡制作方案 | 数学】_第1张图片

目录

    • 题目链接
    • ⛲ 题目描述
    • 求解思路&实现代码&运行结果
      • ⚡ 数学公式 + 鸡兔同笼
        • 求解思路
        • 实现代码
            • 暴力实现
            • 公式实现
        • 运行结果
    • 共勉

题目链接

  • 1276. 不浪费原料的汉堡制作方案

⛲ 题目描述

圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。

给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:

巨无霸汉堡:4 片番茄和 1 片奶酪
小皇堡:2 片番茄和 1 片奶酪
请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量都是 0。

如果无法使剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量为 0,就请返回 []。

示例 1:

输入:tomatoSlices = 16, cheeseSlices = 7
输出:[1,6]
解释:制作 1 个巨无霸汉堡和 6 个小皇堡需要 41 + 26 = 16 片番茄和 1 + 6 = 7 片奶酪。不会剩下原料。
示例 2:

输入:tomatoSlices = 17, cheeseSlices = 4
输出:[]
解释:只制作小皇堡和巨无霸汉堡无法用光全部原料。
示例 3:

输入:tomatoSlices = 4, cheeseSlices = 17
输出:[]
解释:制作 1 个巨无霸汉堡会剩下 16 片奶酪,制作 2 个小皇堡会剩下 15 片奶酪。
示例 4:

输入:tomatoSlices = 0, cheeseSlices = 0
输出:[0,0]
示例 5:

输入:tomatoSlices = 2, cheeseSlices = 1
输出:[0,1]

提示:

0 <= tomatoSlices <= 10^7
0 <= cheeseSlices <= 10^7

求解思路&实现代码&运行结果


⚡ 数学公式 + 鸡兔同笼

求解思路
  1. 根据题目要求,推导数学公式,求解即可。(该题说的更明白一些,就是鸡兔同笼的问题)。
  2. 实现代码如下所示:
实现代码
暴力实现
class Solution {
    public List<Integer> numOfBurgers(int tomatoSlices, int cheeseSlices) {
        List<Integer> res = new ArrayList<>();
        for (int i = 0; res.size() == 0; i++) {
            int bigA = 4 * i, bigB = 1 * i;
            if (bigA > tomatoSlices || bigB > cheeseSlices)
                return res;
            if ((tomatoSlices - bigA) % 2 == 0 && (cheeseSlices - bigB) == (tomatoSlices - bigA) / 2) {
                res.add(i);
                res.add((tomatoSlices - bigA) / 2);
                return res;
            }
        }
        return res;
    }
}
公式实现
class Solution {
    public List<Integer> numOfBurgers(int tomatoSlices, int cheeseSlices) {
        if (tomatoSlices % 2 != 0 || tomatoSlices < cheeseSlices * 2 || cheeseSlices * 4 < tomatoSlices) {
            return new ArrayList<>();
        }
        List<Integer> ans = new ArrayList<Integer>();
        ans.add(tomatoSlices / 2 - cheeseSlices);
        ans.add(cheeseSlices * 2 - tomatoSlices / 2);
        return ans;
    }
}
运行结果

【LeetCode:1276. 不浪费原料的汉堡制作方案 | 数学】_第2张图片


共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

你可能感兴趣的:(LeetCode每日一题打卡,leetcode,算法,java,公式)