今天不上班,我去老家一趟把博客更下
给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数 组成,且其中所有整数互不相同。
对于每对满足 0 <= i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。
那么第 k 个最小的分数是多少呢? 以长度为 2 的整数数组返回你的答案, 这里 ans。
这个解题思路很惭愧不是我的,我去看了别人思路的才写出来了,很惭愧
class Solution {
public int[] kthSmallestPrimeFraction(int[] arr, int k) {
PriorityQueue<int[]> pq = new PriorityQueue<int[]>((a,b)->arr[a[0]]*arr[b[1]] - arr[a[1]]*arr[b[0]]);
for(int i = 1; i < arr.length; i++){
pq.add(new int[]{0, i});
}
while(k > 1){
int[] frac = pq.poll();
if(frac[0]++ < frac[1]){
pq.add(frac);
}
k–;
}
int[] ans = pq.poll();
return new int[]{arr[ans[0]], arr[ans[1]]};
}
}