题目描述
给你两个整数 tomatoSlices
和 cheeseSlices
,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:
- 巨无霸汉堡:4 片番茄和 1 片奶酪
- 小皇堡:2 片番茄和 1 片奶酪
请你以 [total_jumbo, total_small]
([巨无霸汉堡总数,小皇堡总数]
)的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices
和奶酪片 cheeseSlices
的数量都是 0。
如果无法使剩下的番茄片 tomatoSlices
和奶酪片 cheeseSlices
的数量为 0,就请返回 []
。
样例
输入:tomatoSlices = 16, cheeseSlices = 7
输出:[1,6]
输入:tomatoSlices = 17, cheeseSlices = 4
输出:[]
解释:只制作小皇堡和巨无霸汉堡无法用光全部原料。
输入:tomatoSlices = 4, cheeseSlices = 17
输出:[]
解释:制作 1 个巨无霸汉堡会剩下 16 片奶酪,制作 2 个小皇堡会剩下 15 片奶酪。
输入:tomatoSlices = 0, cheeseSlices = 0
输出:[0,0]
输入:tomatoSlices = 2, cheeseSlices = 1
输出:[0,1]
限制
0 <= tomatoSlices <= 10^7
0 <= cheeseSlices <= 10^7
算法
(数学) $O(1)$
此题就是解二元一次方程组,设巨无霸汉堡的数量为 $x$,小皇堡的数量为 $y$,则需要满足:
- $4x + 2y = tomatoSlices$
- $x + y = cheeseSlices$
利用初中数学就可以判断最后 $x$ 和 $y$ 是不是都为非负整数。
时间复杂度
- 利用公式判断,时间复杂度为 $O(1)$。
空间复杂度
- 只需要常数的额外空间。
C++ 代码
class Solution {
public:
vector<int> numOfBurgers(int tomatoSlices, int cheeseSlices) {
int xx = tomatoSlices - 2 * cheeseSlices;
if (xx < 0 || xx % 2 != 0)
return {};
int x = xx / 2;
int y = cheeseSlices - x;
if (y < 0)
return {};
return {x, y};
}
};