1801. 积压订单中的订单总数

news2024/11/16 7:37:28

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

题目:

给你一个二维整数数组 orders ,其中每个 orders[i] = [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。

订单类型 orderTypei 可以分为两种:

0 表示这是一批采购订单 buy
1 表示这是一批销售订单 sell
注意,orders[i] 表示一批共计 amounti 笔的独立订单,这些订单的价格和类型相同。对于所有有效的 i ,由 orders[i] 表示的所有订单提交时间均早于 orders[i+1] 表示的所有订单。

存在由未执行订单组成的 积压订单 。积压订单最初是空的。提交订单时,会发生以下情况:

如果该订单是一笔采购订单 buy ,则可以查看积压订单中价格 最低 的销售订单 sell 。如果该销售订单 sell 的价格 低于或等于 当前采购订单 buy 的价格,则匹配并执行这两笔订单,并将销售订单 sell 从积压订单中删除。否则,采购订单 buy 将会添加到积压订单中。
反之亦然,如果该订单是一笔销售订单 sell ,则可以查看积压订单中价格 最高 的采购订单 buy 。如果该采购订单 buy 的价格 高于或等于 当前销售订单 sell 的价格,则匹配并执行这两笔订单,并将采购订单 buy 从积压订单中删除。否则,销售订单 sell 将会添加到积压订单中。
输入所有订单后,返回积压订单中的 订单总数 。由于数字可能很大,所以需要返回对 109 + 7 取余的结果。

示例 1:
image.png
输入:orders = [[10,5,0],[15,2,1],[25,1,1],[30,4,0]]
输出:6
解释:输入订单后会发生下述情况:

  • 提交 5 笔采购订单,价格为 10 。没有销售订单,所以这 5 笔订单添加到积压订单中。
  • 提交 2 笔销售订单,价格为 15 。没有采购订单的价格大于或等于 15 ,所以这 2 笔订单添加到积压订单中。
  • 提交 1 笔销售订单,价格为 25 。没有采购订单的价格大于或等于 25 ,所以这 1 笔订单添加到积压订单中。
  • 提交 4 笔采购订单,价格为 30 。前 2 笔采购订单与价格最低(价格为 15)的 2 笔销售订单匹配,从积压订单中删除这 2 笔销售订单。第 3 笔采购订单与价格最低的 1 笔销售订单匹配,销售订单价格为 25 ,从积压订单中删除这 1 笔销售订单。积压订单中不存在更多销售订单,所以第 4 笔采购订单需要添加到积压订单中。
    最终,积压订单中有 5 笔价格为 10 的采购订单,和 1 笔价格为 30 的采购订单。所以积压订单中的订单总数为 6 。
    示例 2:
    image.png
    输入:orders = [[7,1000000000,1],[15,3,0],[5,999999995,0],[5,1,1]]
    输出:999999984
    解释:输入订单后会发生下述情况:
  • 提交 109 笔销售订单,价格为 7 。没有采购订单,所以这 109 笔订单添加到积压订单中。
  • 提交 3 笔采购订单,价格为 15 。这些采购订单与价格最低(价格为 7 )的 3 笔销售订单匹配,从积压订单中删除这 3 笔销售订单。
  • 提交 999999995 笔采购订单,价格为 5 。销售订单的最低价为 7 ,所以这 999999995 笔订单添加到积压订单中。
  • 提交 1 笔销售订单,价格为 5 。这笔销售订单与价格最高(价格为 5 )的 1 笔采购订单匹配,从积压订单中删除这 1 笔采购订单。
    最终,积压订单中有 (1000000000-3) 笔价格为 7 的销售订单,和 (999999995-1) 笔价格为 5 的采购订单。所以积压订单中的订单总数为 1999999991 ,等于 999999984 % (109 + 7) 。

java代码:

class Solution {
    public int getNumberOfBacklogOrders(int[][] orders) {
        final int MOD = 1000000007;
        PriorityQueue<int[]> buyOrders = new PriorityQueue<int[]>((a, b) -> b[0] - a[0]);
        PriorityQueue<int[]> sellOrders = new PriorityQueue<int[]>((a, b) -> a[0] - b[0]);
        for (int[] order : orders) {
            int price = order[0], amount = order[1], orderType = order[2];
            if (orderType == 0) {
                while (amount > 0 && !sellOrders.isEmpty() && sellOrders.peek()[0] <= price) {
                    int[] sellOrder = sellOrders.poll();
                    int sellAmount = Math.min(amount, sellOrder[1]);
                    amount -= sellAmount;
                    sellOrder[1] -= sellAmount;
                    if (sellOrder[1] > 0) {
                        sellOrders.offer(sellOrder);
                    }
                }
                if (amount > 0) {
                    buyOrders.offer(new int[]{price, amount});
                }
            } else {
                while (amount > 0 && !buyOrders.isEmpty() && buyOrders.peek()[0] >= price) {
                    int[] buyOrder = buyOrders.poll();
                    int buyAmount = Math.min(amount, buyOrder[1]);
                    amount -= buyAmount;
                    buyOrder[1] -= buyAmount;
                    if (buyOrder[1] > 0) {
                        buyOrders.offer(buyOrder);
                    }
                }
                if (amount > 0) {
                    sellOrders.offer(new int[]{price, amount});
                }
            }
        }
        int total = 0;
        for (PriorityQueue<int[]> pq : Arrays.asList(buyOrders, sellOrders)) {
            while (!pq.isEmpty()) {
                int[] order = pq.poll();
                total = (total + order[1]) % MOD;
            }
        }
        return total;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/134352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HTMLCSS】运维、后端你该会的前端基本内容

文章目录前言一、HTML5基础1.1、前端开发的核心技术1.2、Web组成标准1.3、HTML 实例1.3.1、第一个网页1.4、 文本标签1.5、转义字符1.6、图片1.7、超链接1.8、列表1.8.1、无序列表1.8.2、有序列表1.8.3、自定义列表1.9、表格1.9.1、合并单元格1.10、表单二、CSS基础2.1、入门2.…

【论文导读】Stable Learning via Sparse Variable Independence

准备follow一下稳定学习的系列论文&#xff0c;从这篇开始吧。 AAAI2023上的&#xff0c;主要是根据前几年稳定学习组提出的SV特征分类、关注稳定的S特征的样本重加权的优化 针对问题和措施&#xff1a; 稳定学习算法采用的样本重加权有弊端&#xff1a; 1&#xff0c;在有限…

ESP8266 SDK开发之AiThinkerIDE_V1.5.2安装、配置以及编写一个程序

【本文发布于https://blog.csdn.net/Stack_/article/details/128509864&#xff0c;未经允许不得转载&#xff0c;转载须注明出处】 前言 乐鑫官方不搞IDE&#xff0c;安信可搞了IDE&#xff0c;但是各版本之间安装配置有差异&#xff0c;还没有文档说明。官方安装配置教程不完…

IEEE论文投稿流程

转载文章 这是篇节省你翻论坛、查资料的文章。 我将把每一步尽量写的清楚&#xff0c;能够让新手按照这篇文章进行完整的投稿。 即使你从未投过稿&#xff0c;完全不了解IEEE的投稿流程&#xff0c;希望按照这篇文章&#xff0c;能够帮助你流畅无误的投稿 这是针对本科生和低年…

springboot整合springcloud之nacos配置中心

整合配置中心nacos 应用场景&#xff0c;每次改配置要重新启动才能生效&#xff0c;而把配置放到nacos上&#xff0c;如有修改&#xff0c;那么发布后项目自动就生效了。 场景2&#xff1a;不同微服务单独设置一个命名空间。 一、项目操作 1.引入依赖 <!--使用spring-cloud…

JDBC---Maven之jdbc连接数据库

Maven之jdbc连接数据库 这里需提前将maven环境配置好 链接: Maven环境配置 文章目录Maven之jdbc连接数据库JDBC创建Maven工程JDBC访问数据库步骤1.Class.forName()加载驱动2.DriverManager获取Connection连接3.创建Statement执行SQL语句4.返回ResultSet查询结果()5.释放资源JD…

vsmoon靶场实战笔记

vsmoon靶场实战笔记 web打点 信息收集 nmap扫描端口 扫描结果 └─$ nmap -sV -A 192.168.1.106 -Pn Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-01 12:51 CST Nmap scan report for 192.168.1.106 Host is up (0.00014s latency). Not shown: 986 closed tcp p…

YOLOv5更换骨干网络之 GhostNet

论文地址&#xff1a;https://arxiv.org/abs/1911.11907 代码地址&#xff1a;https://github.com/huawei-noah/ghostnet 由于内存和计算资源有限&#xff0c;在嵌入式设备上部署卷积神经网络&#xff08;CNN&#xff09;很困难。特征图中的冗余是那些成功的神经网络的重要特征…

年度征文 | 回顾2022,展望2023(我难忘的2022,我憧憬的2023)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

用javascript分类刷leetcode7.双指针(图文视频讲解)

双指针 普通指针&#xff1a;两指针同一方向或不同方向对撞指针&#xff1a;两指针互相靠拢快慢指针&#xff1a;一快一慢 141. 环形链表 (easy) 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再…

LeetCode字符串经典题目(四)

1. LeetCode344. 反转字符串 2. LeetCode541. 反转字符串 II 3. LeetCode剑指 Offer 05. 替换空格 4. LeetCode151. 反转字符串中的单词 5. LeetCode剑指 Offer 58 - II. 左旋转字符串 6. LeetCode28. 找出字符串中第一个匹配项的下标​ 7. LeetCode459. 重复的子字符串​…

Mac内存空间不足如何释放储存空间?深度清理Mac磁盘空间的方法教程

今日coco玛奇朵将分享一些能够释放大量Mac内存空间的方法&#xff0c;以便大家能够优化Mac的运行速度外还能规避由于Mac空间不足而导致安装Ventura时出现的一系列问题。 大家都知道更新Macos都需要预备非常大的内存空间才能进行&#xff0c;当更新完Macos之后都会留下大量的备…

台大应用深度学习笔记

deep learning end-to-end training 1. 神经元 1.1 为什么需要bias&#xff1f; 为了给对应位置一个prior&#xff0c;给它一个初始值&#xff0c;b越大&#xff0c;σ(z)11e−z\sigma(z) \frac{1}{1e^{-z}}σ(z)1e−z1​越大&#xff0c;越趋向于1. 多层神经网络&#xff…

安装Windows和Ubuntu双系统

制作Ubuntu安装盘在Windows上查看磁盘格式 不同的磁盘格式&#xff0c;需要跟BIOS里面不同的引导模式配合来启动操作系统&#xff0c;如下图&#xff1a; 我的电脑是GPT格式&#xff1a; 准备好给Ubuntu的磁盘空间 在Windows系统中&#xff0c;在一个200G的清空数据的磁盘上…

【Flask-Web】基于layui前端模板搭建简易管理系统

1. JavaScript 1.1. 函数 var cars ["Saab", "Volvo", "BMW"]; var txt "string"; var b2new Boolean(1); var x Math.PI; // 返回PI var y Math.sqrt(16); // 返回16的平方根 var num new Number(value); try {adddlert("…

aws eks 理解和使用terrafrom创建eks集群(离线安装provider和module)

参考 使用 Terraform 在 AWS 中国区域实现自动化部署指南系列1使用 Terraform 在 AWS 中国区域实现自动化部署指南系列2https://lonegunmanb.github.io/introduction-terraform/加速 Terraform init terraform 相关概念 terraform是对标aws cloud formation的iac工具&#x…

Redis集群系列十一 —— 故障转移一

故障发现 Redis 集群内节点通过 ping/pong 消息实现节点通信&#xff0c;消息不但可以传播节点槽信息&#xff0c;还可以传播其他状态。当集群中某个节点出现问题时&#xff0c;需要识别出节点是否发生了故障&#xff0c;因此故障发现是通过Gossip 协议来广播自己的状态以及自…

日志系统:WAL和二阶段提交

1. 前言 一条更新语句在执行过程中不仅仅要操作不仅仅是通过数据库的组件(分析器、优化器、执行器、存储引擎等&#xff09;操作表数据还涉及以下内容&#xff1a; 要操作日志系统的redo log、binlog和undo log&#xff0c; 更新操作也不是实时更新到磁盘的而是通过3.Write-A…

DDR3 数据传输 (五)

目录 引言 设计说明 参数说明 设计简图 IP配置说明 写FIFO IP

在linux上使用CMake构建和安装gtest

在linux上使用CMake构建和安装gtest一、准备工作二、构建并安装gtest的静态库三、构建并安装gtest的共享库一、准备工作 本机环境&#xff1a; 系统版本&#xff1a;RHEL 7.6GCC/G版本&#xff1a; 12.1.1googletest版本&#xff1a;1.12.1 注意&#xff0c;gtest的1.12.x分…