• 【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.length;i++){
                nums[i] = 0;
            }
    
            // 构建差分数组
            int[] diff = new int[n];
            diff[0] = nums[0];
            for(int i=1;i<nums.length;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+1<nums.length) diff[j+1] -=val;
            }
    
            //构建结果数组
            int[] res = new int[nums.length];
            res[0] = diff[0];
            for(int i=1;i<nums.length;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;
    
    
        }
    }
  • 相关阅读:
    golang实现单链表
    koa中间执行机制
    vuex源码简析
    从浏览器渲染过程看重绘回流
    javascript的this
    js 设计模式:观察者和发布订阅模式
    H5 移动端 键盘遮挡焦点元素解决方案
    webpack4 css modules
    Daily,一个入门级的 React Native 应用
    javascript: 类型转换
  • 原文地址:https://www.cnblogs.com/xiangshigang/p/16218328.html
Copyright © 2020-2023  润新知