每日打卡

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};


}
上一篇 下一篇

猜你喜欢

热点阅读