2021-11-29 786. 第 K 个最小的素数分数
2021-11-29 本文已影响0人
16孙一凡通工
总算遇到了自定义排序的题目,x先把所有的分数对应的分子和分母都统计到数组或者list当中,然后采用自定义排序的思路,计算分数,并按照分数大小进行排序。最后输出第k个。
java版本
class Solution {
public int[] kthSmallestPrimeFraction(int[] arr, int k) {
int n=arr.length-1;
List<int[]> tmp=new ArrayList<>();
//
// for i:=0;i<len(arr)-1;i++{
// for j:=len(arr)-1;j>i;j--{
for(int i=0;i<n;i++){
for(int j=n;j>i;j--){
tmp.add(new int[]{arr[i],arr[j]});
}
}
// System.out.println(tmp.get(0));
// Collections.sort(frac, (x, y) -> x[0] * y[1] - y[0] * x[1]);
Collections.sort(tmp,(x,y)-> x[0]*y[1]-x[1]*y[0]);
return tmp.get(k-1);
}
}
Go版本
func kthSmallestPrimeFraction(arr []int, k int) []int {
// 计算所有可能的情况,并排序
// 输出第k个
// 这里采用自定义排序
type pair struct{
x int
y int
}
tmp:=[]pair{};
for i:=0;i<len(arr)-1;i++{
for j:=len(arr)-1;j>i;j--{
tmp=append(tmp,pair{arr[i],arr[j]});
}
}
sort.Slice(tmp,func(i int,j int)bool{
a,b:=tmp[i],tmp[j];
return a.x*b.y<a.y*b.x;
})
return []int{tmp[k-1].x,tmp[k-1].y};
}