← 返回编程题库
coding-unique-tickers-in-session简单免费版2000ms未尝试

盘中出现的唯一标的集合

Unique Tickers In Session

开始编码

做日内数据回放或者 PnL 归因时,第一步常常是回答一个看似简单但很基础的问题:今天这一段成交流里到底碰过哪些标的? 这张“唯一标的清单”是后续构造仓位字典、行情快照、风险敞口表的索引基准。流入的成交记录由多家撮合通道通过不同链路上送,里面难免混入空字段、被前后空格包裹的代码、或者根本没填 ticker 字段的损坏行——这些脏数据不能让整个清单构造流程崩掉,但也不应该污染最终结果。

请实现 solution(trades: list[dict]) -> list[str]trades 是一段按时间顺序到达的成交记录,每条记录是一个 dict,至少可能包含 tickerpriceqty 等字段(也可能有别的字段,忽略即可)。返回按字典序升序的、去重后的标的列表。规范化规则:取出 ticker 字段后调用 .strip();若该字段缺失、为 None、或剥掉首尾空白后是空字符串,整条记录被丢弃;保留时区分大小写,ABCabc 是两个不同标的。

举例:solution([{"ticker": "ABC", "qty": 100}, {"ticker": " XYZ", "qty": 50}, {"ticker": "ABC", "qty": 200}, {"ticker": "", "qty": 10}, {"price": 100.0, "qty": 5}, {"ticker": "xyz", "qty": 30}]) 应返回 ["ABC", "XYZ", "xyz"]。两次出现的 ABC 只计一次;" XYZ" 被剥掉空白后存为 "XYZ";空字符串和缺失 ticker 的两条记录被忽略;xyzXYZ 被视为不同标的,都进入清单;最后按字典序排序,大写字母 ASCII 小于小写,所以 XYZ 排在 xyz 之前。

20 万条记录的体量下,朴素的 if x not in result_list: result_list.append(x) 会退化到 O(n²)。请用集合做去重,整体复杂度控制在 O(n + k log k),其中 k 是不同标的数量。

约束条件

  • 0 ≤ len(trades) ≤ 200000
  • 每条 trade 是形如 `{"ticker": str, "price": float, "qty": int}` 的字典,可能还包含其他字段;只需读 `ticker`
  • ticker 是大小写敏感的——`ABC` 与 `abc` 视为不同标的;但前后空白要被剥掉(`" ABC "` 等价于 `"ABC"`)
  • 若 `ticker` 字段缺失、为 None、或剥掉空白后为空字符串,则该笔成交被忽略
  • 返回值是按字典序升序的去重列表,列表中的字符串保留剥掉空白后的形式

样例

Case 1 · example from statement

输入: [[{"ticker":"ABC","qty":100},{"ticker":" XYZ","qty":50},{"ticker":"ABC","qty":200},{"ticker":"","qty":10},{"price":100,"qty":5},{"ticker":"xyz","qty":30}]]

期望: ["ABC","XYZ","xyz"]

ABC 出现两次只计一次;" XYZ" 剥空白后等于 "XYZ";空字符串和缺失 ticker 的记录被丢弃;xyz 与 XYZ 视为不同标的;按字典序升序时大写排在小写之前。

Case 2 · all distinct, already in order

输入: [[{"ticker":"MNO","price":150,"qty":1},{"ticker":"DEF","price":130,"qty":2},{"ticker":"GHI","price":250,"qty":3}]]

期望: ["DEF","GHI","MNO"]

三条成交各对应一个不同标的,已去重并按字典序排序后返回。

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · example from statement

输入: [[{"ticker":"ABC","qty":100},{"ticker":" XYZ","qty":50},{"ticker":"ABC","qty":200},{"ticker":"","qty":10},{"price":100,"qty":5},{"ticker":"xyz","qty":30}]]

期望: ["ABC","XYZ","xyz"]

ABC 出现两次只计一次;" XYZ" 剥空白后等于 "XYZ";空字符串和缺失 ticker 的记录被丢弃;xyz 与 XYZ 视为不同标的;按字典序升序时大写排在小写之前。

Case 2 · all distinct, already in order

输入: [[{"ticker":"MNO","price":150,"qty":1},{"ticker":"DEF","price":130,"qty":2},{"ticker":"GHI","price":250,"qty":3}]]

期望: ["DEF","GHI","MNO"]

三条成交各对应一个不同标的,已去重并按字典序排序后返回。