【笔经】【老虎】

选择题
1.知道树的中序和后序 求前序
忘得差不多了,反正不难,就是分值大,5分一道
编程题
1.汽车载客trips = {{2,1,4}{4,2,6}},capacity = 5 输出 = 2
trips[i][0]是乘客数量,trips[i][1]是上车地点,trips[i][2]是下车地点。capacity是车的最大容量,求最少需要多少车?
按照上车时间从小到大排序。创建一个优先队列,按照最早的下车时间进队的,看上车的人数是不是超过capacity,超过就count++。AC!
public int minCarCount (int[][] trips, int capacity){
        Arrays.sort(trips, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) {
            return o1[1] - o2[1];
        }
        });
        int count = 1;
        PriorityQueue<int[]> q = new PriorityQueue<>(new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) {
            return o1[2] - o2[2];
        }
        });
        int sum = 0;
        for (int i = 0; i < trips.length; i++) {
            boolean flag = true;
            while(q.size() > 0 && flag){
                int[] t = q.peek();
                if(trips[i][1] >= t[2]){
                    int[] temp = q.poll();
                    sum -= temp[0];
                }
                else  flag = false;
            }
            q.add(trips[i]);
            sum += trips[i][0];
            if(sum > capacity){
                count++;
            }
        }
        return count;
    }


2.打怪,level = 1,level表示初始层级,x = 2,x表示需要做的任务数,  tasks={{0,1},{1,2},{1,3}} 只有level>=tasks[i][0],level才能+=tasks[i][1],求level最大是多少?
没做完。感觉也是用贪心来做。
全部评论
楼主,感觉代码不太对啊,是不是我理解错了,当测试用例为trips = {{2,1,5},{4,2,6},{2,3,7},{1,4,8}};capacity = 5;时 前4站一直上人,没有人下车,但是人数最多时(第四站)只有9人,2辆车就够了,但是如果按照代码当判断sum > capacity时就count++,那么从第二站(累计6人)之后每次都count++,得到答案为4.所以是不是我理解错了题意?
2
送花
回复 分享
发布于 2020-08-12 21:57

相关推荐

点赞 4 评论
分享
牛客网
牛客企业服务