Skip to content

Commit b8a2291

Browse files
authored
Create 3116-kth-smallest-amount-with-single-denomination-combination.js
1 parent adf51d2 commit b8a2291

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
function calcLcm(a, b) {
2+
let p = a * b
3+
4+
let t = 0
5+
while (b) {
6+
t = b
7+
b = a % b
8+
a = t
9+
}
10+
11+
return p / a
12+
}
13+
14+
/**
15+
* @param {number[]} coins
16+
* @param {number} k
17+
* @return {number}
18+
*/
19+
var findKthSmallest = function (coins, k) {
20+
let n = coins.length
21+
22+
let cnt = 0
23+
let lcm = 1
24+
let sgn = -1
25+
let cur = 0
26+
let res = 0
27+
28+
let l = 1
29+
let r = 50000000000
30+
31+
while (l <= r) {
32+
cur = Math.floor((l + r) / 2)
33+
cnt = 0
34+
bt(0)
35+
36+
if (cnt >= k) {
37+
res = cur
38+
r = cur - 1
39+
} else {
40+
l = cur + 1
41+
}
42+
}
43+
44+
return res
45+
46+
function bt(i) {
47+
let bak = lcm
48+
lcm = calcLcm(lcm, coins[i])
49+
sgn = -sgn
50+
cnt += sgn * Math.floor(cur / lcm)
51+
52+
++i
53+
if (i < n) bt(i)
54+
55+
lcm = bak
56+
sgn = -sgn
57+
if (i < n) bt(i)
58+
}
59+
}

0 commit comments

Comments
 (0)