这是我在为贸易/付款服务公司进行SWE实习OA时通常遇到的一种类型的问题:给定形式为“操作-客户ID-交易ID-金额”的交易列表,我们需要对其进行处理并返回采取的行动清单或剩余金额。
这是一个具体的例子。输入是一个字符串列表,格式为“动作订单ID-价格-金额-买/卖”,仅包含两个动作SUB(提交)和CXL(取消)。
要求我们返回要执行的操作的列表,输出应该是具有以下格式的字符串列表:“订单ID-买入/卖出-买入/卖出金额”
输入和输出示例:
输入:[“ SUB-hghg-10-400-B”,“ SUB-abab-15-500-B”,“ SUB-abcd-10-400-S”]
输出:[“ abcd-S-400”]
说明:“ abab”的买入价比“ hghg”高,尽管后来出现了,所以将首先对其进行处理。abab的数量= 500,abcd的数量= 400 =>数量= 400
输入:[“ SUB-hghg-10-400-B”,“ CXL-hghg”]
输出: []
说明:不执行任何操作,因为订单在执行之前已被取消。
我已经尝试使用哈希映射来解决问题,但是对我来说它变得太复杂了。以前,我也遇到过类似的问题,但是不同之处在于,Cancel将删除订单,而不管其是否已填写,在这种情况下,我使用LinkedList来跟踪订单。
我想问一下是否有任何通用方法可以最佳地解决这类问题。我在LeetCode上徘徊了一段时间,练习了一些中级问题,但是还没有遇到这种问题类型。如果有任何典型的数据结构可以有效地存储每个订单的信息,我也想知道。我还在互联网上搜索了一些关键字,例如算法交易,用于处理付款/交易的算法,但我还没有发现任何有用的东西。任何帮助是极大的赞赏!
非常感谢你阅读我冗长的帖子。
因此,你的输入是一系列已提交的订单和取消的订单,而你的输出是订单匹配时发生的一系列交易,对吗?
我将按以下方式解决该问题:创建一个订单簿数据结构,该结构包含所有未平价交易,单独购买和出售,按价格排序的交易。
初始化:订单簿当然被初始化为空。初始化你产生的空交易清单。
循环:然后一个接一个地处理传入的请求(提交或取消),并将其应用于订单簿。这将把订单添加到书中,或者该订单与一个或多个其他订单匹配,从而产生新的交易。将产生的交易追加到你的交易清单中。
基本上就是这样。但是,请注意,将新订单与这本书匹配并不是一件容易的事。书中的一个订单可能仅部分匹配并保留在书中,否则新订单将仅部分匹配,其余金额必须添加到书中。我建议你为单个步骤编写单元测试,以确保你的订单已按预期进行排序和匹配。