LeetCode 1801. 积压订单中的订单总数(map)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个二维整数数组 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 将会添加到积压订单中。

输入所有订单后,返回积压订单中的 订单总数
由于数字可能很大,所以需要返回对 10^9 + 7 取余的结果。

示例 1:
在这里插入图片描述

输入: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:
在这里插入图片描述

输入: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 % (10^9 + 7) 。提示:
1 <= orders.length <= 10^5
orders[i].length == 3
1 <= pricei, amounti <= 10^9
orderTypei 为 01

https://leetcode-cn.com/problems/number-of-orders-in-the-backlog/

2. 解题

  • 使用 map ,更新维护,数量为0的时候删除
typedef pair<int,int> pii;
struct cmp{bool operator()(int a, int b) const{return a > b;}
};
class Solution {
public:int getNumberOfBacklogOrders(vector<vector<int>>& orders) {map<int, long long> qsell;map<int,long long,cmp> qbuy;for(int i = 0; i < orders.size(); ++i){int num = orders[i][1];int price = orders[i][0];if(orders[i][2] == 0)//buy订单{for(auto it=qsell.begin(); it != qsell.end() && num; ){if(price >= it->first){if(it->second > num){it->second -= num;num = 0;break;}else{num -= it->second;it->second = 0;qsell.erase(it++);}}elsebreak;}if(num){qbuy[price] += num;}}else{for(auto it=qbuy.begin(); it != qbuy.end() && num; ){if(price <= it->first){if(it->second > num){it->second -= num;num = 0;break;}else{num -= it->second;it->second = 0;qbuy.erase(it++);}}elsebreak;}if(num){qsell[price] += num;}}}long long ans = 0, mod = 1e9+7;for(auto it=qsell.begin(); it != qsell.end(); ++it){ans = (ans + it->second)%mod;}for(auto it=qbuy.begin(); it != qbuy.end(); ++it){ans = (ans + it->second)%mod;}return ans;}
};

248 ms 62.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

quantaxis 云服务器_量化金融策略开源框架:QUANTAXIS

简介&#xff1a; QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一个从数据爬取、清洗存储、分析回测、可视化、交易复盘的本地一站式解决方案。QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一…

listrecord根据某个属性去重_去哪网开发实战记录(9):城市选择页(中)

兄弟组件之间的联动所谓的兄弟组件之间的联动&#xff0c;其实就是实现点击右侧的字母就能跳转至对应的首字母城市&#xff0c;因此列表组件需要知道右侧的字母列表的点击事件所对应的元素字母&#xff0c;这就需要兄弟组件间的数据传递了(Alphabet组件与List组件之间的通信)&a…

写接口是什么意思啊_科普贴:果汁包装上写NFC到底是什么意思?

比起水果&#xff0c;果汁省去了繁杂的处理步骤&#xff0c;选对了能更快地补充营养。今天麦德龙美厨课堂就为大家推荐METRO Chef NFC100%果汁系列&#xff0c;给你真材实料、原汁原味的营养美味。NFC果汁&#xff1a;真材实料 原汁原味如今果汁饮品市场上品类繁杂&#xff0c;…

LeetCode 1802. 有界数组中指定下标处的最大值(思维题)

文章目录1. 题目2. 解题1. 题目 给你三个正整数 n、index 和 maxSum 。 你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length nnums[i] 是 正整数 &#xff0c;其中 0 < i < nabs(nums[i] - nums[i1]…

Linux单用户能做什么,Linux单用户模式详解 及应用场景

一、单用户模式简介二、进入单用户模式修改密码1、Centos6进入单用户修改密码1、重启系统&#xff0c;进入系统欢迎界面按上下左右键进入GRUB界面&#xff1b;2、在GRUB界面选择内核版本&#xff0c;按下e键&#xff1b;3、在此界面可以进行编辑&#xff0c;在最后输入single再…

简单阻容降压电路图_升压降压芯片电路

升压与降压一般是指电源电路的工作模式&#xff0c;有些电源IC可以同时支持升压和降压模式。降压模式——Bust mode&#xff0c;这个大家比较熟悉的&#xff0c;用的也比较多&#xff0c;比如5V-》3.3V稳压&#xff0c;对应的芯片很多大家上网搜一下就有了&#xff0c;有LDO模式…

linux终端分辨率对应表,Linux下设置终端分辨率,最全的VGA代码和分辨率对照表...

一般安装完linux后默认的kernel给的tty分辨率是非常有限的,解决的方法就是给kernel传递VGA参数。对应的要修改的配置文件为 /etc/grub.conf,(或者 /boot/grub/grub.conf)就是在grub.conf启动列表的kernel最后添加vga参数 vgaxxxx, 这个在网上大家列出的解决方案都是大同小异&…

android文件存储位置切换

最近有个需求&#xff0c;助手的google卫星地图和OpenCycleMap下载的离线地图数据&#xff0c;要能够在内置存储和外置存储空间之间切换&#xff0c;因为离线瓦片数据非常大&#xff0c;很多户外用户希望将这些文件存储在外置TF卡上&#xff0c;不占用内置存储空间&#xff0c;…

[c]扫雷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。 玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

netcore docker_让.NetCore程序跑在任何有docker的地方

一.分别在Windows/Mac/Centos上安装DockerWindows上下载地址&#xff1a;https://docs.docker.com/docker-for-windows/install/&#xff08;window上安装的常见问题和解决方案请参考下方步骤六&#xff09;Mac上下载地址&#xff1a;https://hub.docker.com/editions/communit…

MapReduce 编程实践

文章目录1. MapReduce 作业流程2. 实践2.1 启动 hadoop2.2 创建 java 项目2.3 MapReduce shell2.4 MapReduce Web UI3. MapReduce 编程实践&#xff1a;统计对象中的某些属性参考书&#xff1a;《Hadoop大数据原理与应用》1. MapReduce 作业流程 2. 实践 2.1 启动 hadoop sta…

MapReduce 编程实践:统计对象中的某些属性

文章目录1. 生成数据2. 编写实体类3. Mapper类4. Reducer类5. Driver类6. 运行参考书&#xff1a;《Hadoop大数据原理与应用》 相关文章&#xff1a;MapReduce 编程实践 1. 生成数据 超市消费者 数据&#xff1a; id&#xff0c; 时间&#xff0c;消费金额&#xff0c;会员/…

超级签名源码_企业签名和超级签名有哪些区别?

我们知道iOS系统对于非App Store中的应用是有安装限制的&#xff0c;而App Store严格的审核机制又将许多APP拒之门外&#xff0c;这令不少开发者们郁闷不已。所以很多开发者们会选择苹果签名的方式&#xff0c;让自己的iOS APP可以不经过App Store就安装在用户的苹果手机上&…

天池 在线编程 到达终点

文章目录1. 题目2. 解题1. 题目 描述 A robot is located in a pair of integer coordinates (x, y). It must be moved to a location with another set of coordinates. Though the bot can move any number of times, it can only make the following two types of moves:…

第十七节(is-a 、is-like-a 、has-a,包和 import )

is - a 类与类之间的继承关系&#xff1b;is - like - a 类与接口之间的关系&#xff1b;has - a 关联关系&#xff1b; public class Animal{public void method01();}// 类与类之间的关系class Dog extends Animal{ // Dog is a Animal} /// public interface I{public void…

quartz获取开始结束时间_Springboot集成quartz

Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。本文描述在springboot 2.x环境下怎么集成quartz。一、添加quartz到项目中在pom.xml中加入 <dependency>特别注意application入口类的注解&#xff0c;这里一定…

linux 添加本地磁盘,XenServer如何添加本地存储

在一次测试中&#xff0c;发现本地有两块磁盘&#xff0c;但是只有一块磁盘在XenServer中显示出来&#xff0c;另外一块没有显示。本地只有一个Local storage。查询KB后&#xff0c;发现XenServer可以添加多块本地存储。详情&#xff0c;请见KB&#xff1a;CTX121313详细添加如…

LeetCode 1805. 字符串中不同整数的数目(哈希set)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 word &#xff0c;该字符串由数字和小写英文字母组成。 请你用空格替换每个不是数字的字符。 例如&#xff0c;“a123bc34d8ef34” 将会变成 " 123 34 8 34" 。 注意&#xff0c;剩下的这些整数间至少要用一个空格隔…

linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

tree命令&#xff0c;主要功能是创建文件列表&#xff0c;将所有文件以树的形式列出来linux下的tree就比较强大了&#xff0c;但一般系统并不自带这个命令&#xff0c;需要手动下载安装,安装sudo apt install tree## or using yum# yum -y install tree语法tree[-aACdDfFgilnNp…

映射表map(平衡二叉树实现)_手动实现Java集合容器之TreeMap(上)

上一篇我们手写了HashMap&#xff0c;还有一个很重要的Map的实现类TreeMap。打开源码第一句话&#xff1a;* A Red-Black tree based {link NavigableMap} implementation.TreeMap是一个基于红黑树的实现。对红黑树没有了解怎么办&#xff0c;那就先搞清楚红黑树的原理。只要理…