老虎证券 8.9 Java笔试 ak

老虎证券的笔试题,相对来说还是比较简单的,两道题都ac了(近期唯一一次)
第一题:

输入:
trips二维int数组,用于表示一组乘客的行程信息,其中`trip[i]`表示第i组乘客,`trip[i][0]`表示第i组乘客的乘客数量,`trip[i][1]`表示上车站点,`trip[i][2]`表示下车站点
capacity: int 类型,表示每辆车最多能承载多少名乘客

输出:
最少需要多少辆车可以满足乘客需求
思路:找出最小的上车站点和最大的下车站点,计算出在这个区间中,什么时候有最多的乘客在车上,找到这个最多乘客在车上的数量,除以capacity,再+1就ok了
代码:
public static int minCarCount (int[][] trips, int capacity) {
        // write code here
        Arrays.sort(trips, ((o1, o2) -> o1[1] - o2[1]));
        int k = 0;
        int start = trips[0][1];
        int end = trips[trips.length-1][2];
        for (int i = start; i < end; i++) {
            float x = i + 0.5f;
            int count = 0;
            for (int j = 0; j < trips.length; j++) {
                if (x > trips[j][1] && x < trips[j][2]) {
                    count += trips[j][0];
                }
            }
            k = Math.max(count, k);
        }
        return k/5+1;
    }
第二题:
输入:
x:int整型 需要完成的任务数量 level: int整型 初始等级
tasks: int整型二维数组 表示可供选择的任务,tasks[i][0]表示第i个任务所需的最低等级,task[i][1]表示第i个任务完成后能提升的等级 
要求:当前等级大于任务所需最低等级时,才能选择该任务
输出:
做完x个任务后能达到的最高等级
思路:
很明显的贪心,每次选择任务的时候,都尽量去选择可以获得等级最多的任务就ok了
代码:
public static int maxLevel (int x, int level, int[][] tasks) {
        // write code here
        if (x == 0) {
            return level;
        }
        Arrays.sort(tasks, (o1, o2) -> o1[0] - o2[0]);
        if (level < tasks[0][0]) {
            return level;
        }
        Arrays.sort(tasks, (o1, o2) -> o2[1] - o1[1]);
        HashSet<Integer> set = new HashSet<>();
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < tasks.length; j++) {
                if (!set.contains(j) && level >= tasks[j][0]) {
                    level += tasks[j][1];
                    set.add(j);
                    break;
                } else if (set.contains(j)) {
                    continue;
                }
            }
        }
        return level;
    }



#笔试题目##老虎集团#
全部评论
第一题死活没做出来 头疼。。。
点赞 回复 分享
发布于 2020-08-09 19:21
第一题:1、遍历 trips,用 Map 记录乘客经过站点(i, j)时变化的人数(i 为正,j 为负) 2、遍历 Map 可得最大载客数量 sum 2、sum/capacity + (sum%capacity != 0) 为最终答案 时间:O(n+m),空间:O(m),m 为站点个数,n 为乘客组数 第二题:1)如果任务数量 x 不是很大,对任务所需等级进行桶排序,同时对对应提升等级进行累加合并,从左到右扫描桶即可 2)排序(任务所需等级升序,对应提升等级降序),扫描即可
点赞 回复 分享
发布于 2020-09-29 19:52

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务