Skip to content

Commit 29724db

Browse files
authored
Create 2040-kth-smallest-product-of-two-sorted-arrays.js
1 parent 7f7abea commit 29724db

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* @param {number[]} nums1
3+
* @param {number[]} nums2
4+
* @param {number} k
5+
* @return {number}
6+
*/
7+
const kthSmallestProduct = function(nums1, nums2, k) {
8+
const neg = nums1.filter(e => e < 0)
9+
const pos = nums1.filter(e => e >= 0)
10+
const negRev = neg.slice(), posRev = pos.slice()
11+
negRev.reverse()
12+
posRev.reverse()
13+
14+
let l = - (10 ** 10), r = 10 ** 10
15+
while(l < r) {
16+
const mid = l + Math.floor((r - l) / 2)
17+
if(fn(mid) < k) l = mid + 1
18+
else r = mid
19+
}
20+
21+
return l
22+
23+
function fn(val) {
24+
let res = 0, n = nums2.length
25+
let l = 0, r = n - 1
26+
const list = val >= 0 ? negRev.concat(pos) : neg.concat(posRev)
27+
for(let e of list) {
28+
if(e < 0) {
29+
while(l < n && e * nums2[l] > val) l++
30+
res += n - l
31+
} else if (e === 0) {
32+
if(val >= 0) res += n
33+
} else {
34+
while(r >= 0 && e * nums2[r] > val) r--
35+
res += r + 1
36+
}
37+
}
38+
return res
39+
}
40+
};

0 commit comments

Comments
 (0)