K-th Smallest Prime Fraction
MediumArrayTwo PointersBinary SearchSortingHeap (Priority Queue)
Solution
export function kthSmallestPrimeFraction(arr: number[], k: number): number[] {
const n = arr.length;
let [left, right] = [0, 1];
while (left < right) {
const mid = (left + right) / 2;
let maxFraction = 0;
let smallerFractions = 0;
let [numerator, denominator] = [0, 0];
for (let i = 0, j = 1; i < n - 1; i++) {
while (j < n && arr[i] >= mid * arr[j]) {
j += 1;
}
smallerFractions += n - j;
if (j === n) {
break;
}
const fraction = arr[i] / arr[j];
if (maxFraction < fraction) {
[numerator, denominator] = [i, j];
maxFraction = fraction;
}
}
if (smallerFractions === k) {
return [arr[numerator], arr[denominator]];
}
if (smallerFractions > k) {
right = mid;
} else {
left = mid;
}
}
return [];
}