【leetcode】1109. 航班预订统计、1094. 拼车


题目1:1109. 航班预订统计 - 力扣(LeetCode) (leetcode-cn.com)

思路:对每个航班的预定数量抽象成一个数组。航班预订表就相当于对数组num[i...j]上进行增加操作

可以想到用差分数组实现,差分数组原理见,不在赘述

代码如下:

class Solution {
    public int[] corpFlightBookings(int[][] bookings, int n) {
        // 抽象成一个数组
        int[] nums = new int[n];
        //一开始航班预定的数量为0,进行初始化
        for(int i=0;i){
            nums[i] = 0;
        }

        // 构建差分数组
        int[] diff = new int[n];
        diff[0] = nums[0];
        for(int i=1;i){
            diff[i] = nums[i]-nums[i-1];
        }

        for(int[] booking: bookings){
            // 注意转成数组索引要减一
            int i = booking[0]-1;
            int j = booking[1]-1;
            int val = booking[2];
            diff[i] += val;
            if(j+1val;
        }

        //构建结果数组
        int[] res = new int[nums.length];
        res[0] = diff[0];
        for(int i=1;i){
            res[i] = res[i-1]+diff[i];
        }

        return res;


    }
   

}

题目2:

代码

class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        // 统计站种类的数量抽象成一个数组
        int[] nums = new int[1001];

        //构造差分数组
        int[] diff = new int[1001];
        diff[0] = nums[0];
        for(int i=1;i<1000;i++){
            diff[i] = nums[i] - nums[i-1];
        }

        //减操作
        for(int[] trip: trips){
            int val  = trip[0]; 
            int i = trip[1];
            int j = trip[2]-1;
            diff[i] +=val;
              //考虑一次旅途中可能超载的情况
            if(val>capacity) return false;
            if(j+1<1001)  diff[j+1] -=val;
        }

        //结果数组
        int[] res = new int[1001];
        res[0] = diff[0];
        for(int i=1;i<1001;i++){
            res[i] = diff[i]+res[i-1];
            if(res[i]>capacity) return false;
        }

        return true;


    }
}