127.不浪费原料的汉堡制作方案
一、题目
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。
给你两个整数 tomatoSlices
和 cheeseSlices
,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:
- **巨无霸汉堡:**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,使得
i∗4+(cheeseSlices−i)∗2==tomatoSlices
公式成立,就是存在不浪费原料的汉堡制作方案,反之就是不存在。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
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;
x+y=cheeseSlices;
所以得到x,y:
x=tomatoSlices/2−cheeseSlices;
y=2∗cheeseSlices−tomattoSlices/2;
又因为x,y>=0, x,y∈N,所以得到限制条件
tomatoSlices=2K,K∈N
tomatoSlices≥2×cheeseSlices
4∗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)]; };
|
官方题解,执行时间大大减少。
三、思想原理
同鸡兔同笼思想