Skip to content

Commit fd314ca

Browse files
authored
Update 1655-distribute-repeating-integers.js
1 parent 4fedf13 commit fd314ca

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

1655-distribute-repeating-integers.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,53 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number[]} quantity
4+
* @return {boolean}
5+
*/
6+
const canDistribute = function(nums, quantity) {
7+
const freq = new Map()
8+
for(const e of nums) {
9+
freq.set(e, (freq.get(e) || 0) + 1)
10+
}
11+
const cntArr = [...freq.values()]
12+
const dp = Array.from({ length: 51 }, () => Array(1024).fill(false))
13+
const n = cntArr.length, m = quantity.length
14+
for(let i = 0; i < n; i++) {
15+
dp[i][0] = true
16+
}
17+
cntArr.unshift(0)
18+
const allMask = (1 << m) - 1
19+
20+
for(let i = 1; i <= n; i++) {
21+
for(let mask = 1; mask <= allMask; mask++) {
22+
if(dp[i - 1][mask]) {
23+
dp[i][mask] = true
24+
continue
25+
}
26+
for(let subset = mask; subset > 0; subset = (subset - 1) & mask) {
27+
if(dp[i - 1][mask - subset] === false) continue
28+
if(canSatisfySubset(cntArr[i], subset)) {
29+
dp[i][mask] = true
30+
break
31+
}
32+
}
33+
}
34+
}
35+
36+
return dp[n][allMask]
37+
38+
function canSatisfySubset(cnt, subset) {
39+
let sum = 0
40+
for (let i = 0; i < 10; i++) {
41+
if(subset & (1 << i)) {
42+
sum += quantity[i]
43+
}
44+
}
45+
return cnt >= sum
46+
}
47+
};
48+
49+
// another
50+
151
/**
252
* @param {number[]} nums
353
* @param {number[]} quantity

0 commit comments

Comments
 (0)