本题要求在事务标签的约束下,将 SQL 语句行贪心分配到文件中并返回文件数。核心考察并查集 + 约束传递 + 贪心分配。
合法性校验:splitLine 不在 [1,10000] 或 sqlText 为空 → 返回 0。
解析事务标签:遍历每一行,按 ; 拆分语句,提取 [Tn] 格式的事务标签,记录每个标签涉及的行号集合。
某分布式数据库系统需要将 SQL 操作日志拆分到多个文件中,现给定一组 SQL 语句输入(数组格式),请按要求将 SQL 语句拆分到不同文件中并返回拆分后的文件数量。拆分规则如下:
; 分隔)按同一行完整保存,不可跨文件拆分,且同一行的语句必须在同一个文件中。[Tn](n 为正整数),如 [T1]A;相同事务标签的 SQL 语句必须保存于同一文件中。输入:
参数1:单个文件限定可保存的最大 SQL 语句行数 split_line;
参数2:SQL 语句数组 sql_text,每个数组成员可能包含多条 SQL 语句,用符号 ; 分隔;
SQL 语句数组按规则拆分后的文件个数。
split_line 取值范围 [1, 10000],无效值返回 0;sql_text 每行最多 1000 字符,总语句最多 100000 条;[1, 1000];输入
3,["[T1]A;[T2]B;","[T1]C;"]
输出
1
说明
[T1]A 和 [T2]B 共享 1 行,必须同文件;[T1]A 和 [T1]C 同属 T1 事务,必须同文件;{0,1} 共 2 行,不超过 3,故 1 个文件。输入
2,["[T1]A;","[T2]B;","[T1]C;","[T2]D;"]
输出
2
说明
T1 事务包含 A 和 C,数组成员下标 {0,2} 占 2 行;T2 事务包含 B 和 D,数组成员下标 {1,3} 占 2 行;T1 先出现,放入文件 1(2 行),T2 另建文件 2(2 行),共 2 个文件。输入
2,["[T1]A;","[T1]B;","[T1]C;","D;"]
输出
2
说明
T1 事务包含 A、B、C,数组成员下标 {0,1,2} 虽超出限制,但仍单独成文件 1;D 占 1 行,成文件 2。输入
1,[]
输出
0
说明
空输入返回 0。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册