题目
描述
有 x个人打算买 A 类商品,有 y个人打算买 B 类商品,z个人打算买 C 类商品,每个人都只打算买 1 件商品。
现在有一个团购规则,规则如下:
- 每次团购规定买 3 件商品。
- 每次团购至少包括 1 件 A 类商品和 1 件 B 类商品。
请求出这些人最多团购多少次。
题意分析
解题思路
对于这个团购规则,一共有两个限制:
- 每次团购要买三件商品,只考虑这个条件,至多买 (x + y + z) / 3 件商品。
- 每次团购至少包括 1 件 A 类商品和 1 件 B 类商品。至多买 min(x, y) 件商品。
本题要同时满足这两个性质,那么对于这两个限制取最小值就是最终最多的团购次数,不可能有更大的结果。
复杂度分析
时间复杂度
- 时间复杂度为
O(1)
。
空间复杂度
- 空间复杂度为
O(1)
。
JavaScript代码 :
export class Solution {
/**
* @param x: the number of people who plan to buy goods A.
* @param y: the number of people who plan to buy goods B.
* @param z: the number of people who plan to buy goods C.
* @return: return the maximum times they can group buy.
*/
groupBuyTimes(x, y, z) {
// write your code here
// 购买的总和
let a = Math.floor((x+y+z)/3);
// 取x和y的最值,A商品和B商品是必须有的,那么x,y的最小值会限制次数
let b = Math.min(x, y);
return Math.min(a, b);
}
}
运用的JavaScript Math 对象中的知识点。