力扣:不浪费原料的汉堡制作方案

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

一、题目

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

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

  • **巨无霸汉堡:**4 片番茄和 1 片奶酪
  • **小皇堡:**2 片番茄和 1 片奶酪

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

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

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

提示:

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

二、解题

1. 穷举的思想

先假设巨无霸汉堡的数量i,再由奶酪的总数得到小皇堡的数量cheeseSlices-i,如果存在i,使得

i4+(cheeseSlicesi)2==tomatoSlicesi*4+(cheeseSlices-i)*2==tomatoSlices

公式成立,就是存在不浪费原料的汉堡制作方案,反之就是不存在。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @param {number} tomatoSlices
* @param {number} cheeseSlices
* @return {number[]}
*/
var numOfBurgers = function(tomatoSlices, cheeseSlices) {
let minNum=0;
for(let i=0;i<=cheeseSlices;i++){
minNum=cheeseSlices-i;
if(minNum*2+i*4==tomatoSlices){
return [i,minNum];
}
}
return [];
};

2. 利用数据公式

鸡兔同笼汉堡版,设巨无霸汉堡数为x,小皇堡数为y,所以按照题意,可以得到一个二元一次方程式

4x+2y=tomatoSlices;4x+2y=tomatoSlices;

x+y=cheeseSlices;x+y=cheeseSlices;

所以得到x,y:

x=tomatoSlices/2cheeseSlices;x=tomatoSlices/2-cheeseSlices;

y=2cheeseSlicestomattoSlices/2;y=2*cheeseSlices-tomattoSlices/2;

又因为x,y>=0, x,y∈N,所以得到限制条件

tomatoSlices=2KKNtomatoSlices=2K,K∈N

tomatoSlices2×cheeseSlicestomatoSlices≥2×cheeseSlices

4cheeseSlicestomatoSlices4*cheeseSlices≥tomatoSlices

最后按照以上公式得到代码:

1
2
3
4
5
6
7
var numOfBurgers = function(tomatoSlices, cheeseSlices) {
if (tomatoSlices % 2 != 0 || tomatoSlices < cheeseSlices * 2 || cheeseSlices * 4 < tomatoSlices) {
return []
}
return [(tomatoSlices >> 1) - cheeseSlices, cheeseSlices * 2 - (tomatoSlices >> 1)];
};

官方题解,执行时间大大减少。

三、思想原理

同鸡兔同笼思想


力扣:不浪费原料的汉堡制作方案
https://chen77.top/2023/12/25/leetcode/127不浪费原料的汉堡制作方案/
作者
小陈
发布于
2023年12月25日
许可协议