分配重复整数
07/17/2021
题目描述
给你一个长度为 n 的整数数组 nums ,这个数组中至多有 50 个不同的值。同时你有 m 个顾客的订单 quantity ,其中,整数 quantity[i] 是第 i 位顾客订单的数目。请你判断是否能将 nums 中的整数分配给这些顾客,且满足:
第 i 位顾客 恰好 有 quantity[i] 个整数。
第 i 位顾客拿到的整数都是 相同的 。
每位顾客都满足上述两个要求。
如果你可以分配 nums 中的整数满足上面的要求,那么请返回 true ,否则返回 false 。
示例 1:
输入:nums = [1,2,3,4], quantity = [2]
输出:false
解释:第 0 位顾客没办法得到两个相同的整数。
示例 2:
输入:nums = [1,2,3,3], quantity = [2]
输出:true
解释:第 0 位顾客得到 [3,3] 。整数 [1,2] 都没有被使用。
示例 3:
输入:nums = [1,1,2,2], quantity = [2,2]
输出:true
解释:第 0 位顾客得到 [1,1] ,第 1 位顾客得到 [2,2] 。
提示:
- n == nums.length
- 1 <= n <= 105
- 1 <= nums[i] <= 1000
- m == quantity.length
- 1 <= m <= 10
- 1 <= quantity[i] <= 105
- nums 中至多有 50 个不同的数字。
本人题解
/**
* @param {number[]} nums
* @param {number[]} quantity
* @return {boolean}
*/
var canDistribute = function(nums, quantity) {
let numO = {}, numsA = [];
nums.forEach(n => numO[n] = numO[n] ? numO[n] + 1 : 1);
numsA = Object.keys(numO).map(i => numO[i]).sort((a,b) => b-a)
quantity.sort((a,b) => b-a)
let result = false
function distribute(nums, _quantity) {
if (_quantity.length == 0) {
result = true
}
if (result) return;
let q = _quantity.shift();
nums.forEach((n, i) => {
if (n >= q) {
let ns = [...nums]
ns[i] = n - q
distribute(ns, [..._quantity])
}
})
}
distribute([...numsA], [...quantity])
return result
};分析
忘了。以后再补