刷了一圈牛客神州信息的算法题竟然一样

第二题正确思路0(nlogm)的时间复杂度,n为capacity的大小,m为arr的大小

import java.util.*;

public class Main {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int n = in.nextInt();
    int m = in.nextInt();
    int[] capacity = new int[n];
    int[][] arr = new int[m][2];
    for (int i = 0; i < n; i++) {
        capacity[i] = in.nextInt();
    }
    for (int i = 0; i < m; i++) {
        arr[i][0] = in.nextInt();
        arr[i][1] = in.nextInt();
    }
    Arrays.sort(capacity);
    Arrays.sort(arr, (a, b) -> {
        return a[0] != b[0] ? a[0] - b[0] : b[1] - a[1];
    });
    long ans = 0;
    PriorityQueue<Integer> queue = new PriorityQueue<>((a,b) ->{
        return b - a;
    });
    int l = 0;
    for(int i = 0;i < n;i++){
        int j = lower_bound(arr,capacity[i] + 1);
        for(int k = l;k < j;k++){
            queue.offer(arr[i][1]);
        }
        if(!queue.isEmpty()){
            ans += queue.poll();
        }
        l = j;
    }
    System.out.println(ans);
}
public static int lower_bound(int[][] arr,int t){
    int l = -1,r = arr.length;
    while(l + 1 < r){
        int m = (l + r) >> 1;
        if(arr[m][0] >= t){
            r = m;
        }else{
            l = m;
        }
    }
    return r;
}

}

#神州信息求职汇总#
全部评论
我的最后一个测试点超时了,用的List,然后排序
点赞 回复 分享
发布于 03-05 17:07 湖南

相关推荐

评论
1
6
分享

创作者周榜

更多
牛客网
牛客企业服务