积压订单中的订单总数

2024-03-01 12:32
文章标签 订单 总数 积压

本文主要是介绍积压订单中的订单总数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原题指路

积压订单中的订单总数

题目描述

给你一个二维整数数组 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 将会添加到积压订单中。
    输入所有订单后,返回积压订单中的 订单总数 。由于数字可能很大,所以需要返回对 1e9 + 7 取余的结果。

解题思路

图片1.png
这道题的关键在于如何快速地匹配到销售订单的最小值以及采购订单的最大值。于是,我……毫不犹豫地调用了STL中的优先队列来维护这一最小值与最大值序列。

代码

struct order//先定义一个order结构体,指定两类订单不同的排序顺序
{int price, amount, type;friend bool operator< (order n1, order n2){if(n1.type == 0)return n1.price < n2.price;elsereturn n1.price > n2.price;}
};class Solution 
{public:priority_queue<order> buy;priority_queue<order> sell;int getNumberOfBacklogOrders(vector<vector<int>>& orders) {int mod = 1e9 +7;for(int i = 0; i < orders.size(); i++)//主要过程就是在插入同时不断去维护这两个优先队列if(orders[i][2] == 0){while(!sell.empty() && sell.top().price <= orders[i][0]){if(sell.top().amount < orders[i][1]){orders[i][1] -= sell.top().amount;sell.pop();}else if(sell.top().amount == orders[i][1]){sell.pop();orders[i][1] = 0;break;}else if(sell.top().amount > orders[i][1]){order temp = sell.top();sell.pop();temp.amount -= orders[i][1];sell.push(temp);orders[i][1] = 0;break;}}if(orders[i][1])buy.push({orders[i][0], orders[i][1], orders[i][2]});}else{while(!buy.empty() && buy.top().price >= orders[i][0]){if(buy.top().amount < orders[i][1]){orders[i][1] -= buy.top().amount;buy.pop();}else if(buy.top().amount == orders[i][1]){buy.pop();orders[i][1] = 0;break;}else if(buy.top().amount > orders[i][1]){order temp = buy.top();buy.pop();temp.amount -= orders[i][1];buy.push(temp);orders[i][1] = 0;break;}}if(orders[i][1])sell.push({orders[i][0], orders[i][1], orders[i][2]});}int sum = 0;while(!sell.empty()){sum = (sum + sell.top().amount % mod) % mod;sell.pop();}while(!buy.empty()){sum = (sum + buy.top().amount % mod) % mod;buy.pop();}return sum;}
};

这篇关于积压订单中的订单总数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762455

相关文章

3-KYLIN订单例程

转:http://blog.itpub.net/30089851/viewspace-2122586/ 一.Hive订单数据仓库构建 1. 创建事实表并插入数据 DROP TABLE IF EXISTS default.fact_order ; create table default.fact_order (   time_key string,   product_key stri

尚品汇-延迟插件实现订单超时取消(四十五)

目录: (1)延迟插件封装 (2)基于延迟插件测试         如何保证消息幂等性? (3)改造订单service-order模块-实现订单超时取消 (1)延迟插件封装          把消息带过去:  在消息的重试发送消息的方法里封装:retrySendMsg (2)基于延迟插件测试 service-order模块  rabbit-util模块配置

淘宝订单 API 接口:获取淘宝平台数据的 api 接口(电商 ERP 订单对接方案)

taobao.seller_order_list 获取卖家订单列表 taobao.custom 自定义淘宝开放平台 API 公共参数 请求地址: 登录 - 凡邦跨境电商平台接口提供商 数据采集公司 数据接口定制服务 企业级数据服务商 seller_order_list 参数说明 请求参数 请求参数:page=&tabCode=&dateBegin=&dateEnd=&buyerN

手把手教你对接旺店通旗舰版API拉取国内电商店铺订单数据

前言 做国内电商的公司通常会使用比如旺店通这类ERP拉取和分析自己店铺的订单数据,并且可能需要进一步将ERP的订单数据拉取到公司自己做的后台做更个性化的数据分析和需求。这篇博客我以旺店通旗舰版为例,讲解如何通过他们API拉取订单数据到本地。 准备工作 应用创建: 获取API对接信息: sid、appkey、appsecret以及旺店通调用环境http://wdt.wangdian.c

算法打卡 Day28(回溯算法)-组合总数 + 组合总数 Ⅱ+ 电话号码的字母组合

文章目录 Leetcode 17-电话号码的字母组合题目描述解题思路 Leetcode 39-组合总数题目描述解题思路 Leetcode 216-组合总数 Ⅲ题目描述解题思路 Leetcode 17-电话号码的字母组合 题目描述 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/descrip

yt零售系统订单死锁原因

知识前提: InnoDB引擎在加锁的时候,只有通过索引进行检索的时候才会使用行级锁,否则会使用表级锁。 场景: 在订单服务中,开起事务,对同一张表,先更新(无索引),再新增,发生死锁。 原因: 同一线程,更新事务未提交,因为无索引导致了表锁,再新增的时候当前线程等待更新释放锁,会把当前线程挂起来,而锁正是被自己占用,该线程又被挂起而没机会释放锁。 解决方法: 更新的时候在检索列创建索

检测数据过期的处理方法(redis过期时间、订单规定时间内支付等)

三个常见的处理方法: 1.创建的时间新启一个线程去检测当前任务,实时刷新,效率较低。 2.需要用的时候再去查询是否已过期;这个时候需要在设置的时候记录两个数据,创建时间、过期时间,当使用的时候再去判断当前数据是否已过期。 3.我们以支付以后7天自动收货为例来说明下: (1)用户支付完成以后,把订单ID插入到内存的一个DelayQueue中,同时插入到Redis中。 (2)7天之内,用户点

Odoo:开源免费的OMS订单管理系统

企业全渠道订单管理服务平台 开源智造·Odoo免费开源ERP全渠道订单管理应用包含渠道分销订单、零售订单、电商订单、直销订单四部分,主要服务于核心企业的渠道信息化管理,帮助企业从传统分销向移动互联、电商直销或渠道数字化订货转型、新零售转型,为企业搭建全渠道服务平台及高效协同平台 数据统一管理 收集与沉淀各个业务板块的业务数据,特别是外部系统的数据,包括渠道、电商、零售、会员等,实现统

运维问题0001:MM模块-MIGO收货报错“消息号 M7036 对于采购订单********无收货可能”

1、问题解析: 该报错为SAP标准报错类型,针对公司不同配置/业务设计/校验逻辑,导致该问题原因比较多。 常见的问题总结如下: 1)输入的PO信息有问题(例如:PO输入错误/PO删除状态/PO冻结状态/PO已完成收货等); 2)  公司采购流程设计,整体流程未执行到收货节点(例如:PO未审批完成/PO需要确认); 3)特殊订单类型/特殊类型物料采购不允许收货; 4)特定类型订单对收货参

SQL进阶技巧:计算每个uid上一笔成功订单id | 近距离有效匹配问题【last_value ignore nulls实现版】

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 求:每个uid上一笔成功订单id,没有的记录为null, 状态值:1-成功 0-失败 id  time                uid   is_suc    结果列 1  2020-01-01 1    1     Null 2  2020-01-02 1    0     1 3  2020