-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
56 lines (50 loc) · 1.33 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* @param {number[]} giftsCities
* @param {number} maxGifts
* @param {number} maxCities
* @return {number}
*/
function getMaxGifts(giftsCities, maxGifts, maxCities) {
const allowedGiftsCities = giftsCities.filter(
giftsCity => giftsCity <= maxGifts
)
if (allowedGiftsCities.length === 0) return 0
if (allowedGiftsCities.length === 1) return allowedGiftsCities[0]
if (maxCities === 1) return Math.max(...allowedGiftsCities)
return Math.max(
...allowedGiftsCities.map(
(giftsCity, index) =>
giftsCity +
getMaxGifts(
allowedGiftsCities.slice(index + 1),
maxGifts - giftsCity,
maxCities - 1
)
)
)
}
/**
* @param {number[]} giftsCities
* @param {number} maxGifts
* @param {number} maxCities
* @return {number}
*/
function getMaxGiftsOptimized(giftsCities, maxGifts, maxCities) {
const allowedGiftsCities = giftsCities.filter(
giftsCity => giftsCity <= maxGifts
)
if (allowedGiftsCities.length <= 1 || maxCities === 1)
return Math.max(0, ...allowedGiftsCities)
return Math.max(
...allowedGiftsCities.map(
(giftsCity, index) =>
giftsCity +
getMaxGifts(
allowedGiftsCities.slice(index + 1),
maxGifts - giftsCity,
maxCities - 1
)
)
)
}
export {getMaxGifts, getMaxGiftsOptimized}