lc1094.java 1.4 KB
Newer Older
L
liu13 已提交
1 2 3 4 5 6
package code;
/*
 * 1094. Car Pooling
 * 题意:
 * 难度:Medium
 * 分类:
L
liu13 已提交
7
 * 思路: lc56 类似的题,但该题的集合没有传递覆盖的特性,所以遍历的时候又加了个循环,N^2
L
liu13 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
 *       非常巧妙的方法,每次记录上车,下车人数,然后遍历一遍进行模拟上下车
 * Tips:lc253, lc56
 */
import java.util.Arrays;
import java.util.Comparator;

public class lc1094 {
    public boolean carPooling(int[][] trips, int capacity) {
        Arrays.sort(trips, new Comparator<int[]>() {  // 记住这种写法
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[1]!=o2[1])
                    return o1[1] - o2[1];
                else
                    return o2[2] - o1[2];
            }
        });
        for (int i = 0; i < trips.length ; i++) {
            int current = trips[i][0];
            for (int j = i-1; j >=0 ; j--) { //往前找是否重叠
                if(trips[j][2]>trips[i][1]) current += trips[j][0];
            }
            if(current>capacity) return false;
        }
        return true;
    }

    public boolean carPooling2(int[][] trips, int capacity) {
        int stops[] = new int[1001];
        for (int t[] : trips) {
            stops[t[1]] += t[0];
            stops[t[2]] -= t[0];
        }
        for (int i = 0; capacity >= 0 && i < 1001; ++i) capacity -= stops[i];
        return capacity >= 0;
    }
}