表格行合并时如何判断两个Col5单元格的数值无交集
最优判断方案:基于哈希集合的交集检测
方案核心逻辑
你提到的思路1方向是对的,只需要把普通数组替换为**哈希集合(去重集合)**即可,判断效率和准确率都拉满,具体实现步骤如下:
- 第一步预处理:提前把每行Col5的逗号分隔字符串,拆分后转成整数类型的哈希集合,每个行只需要处理一次,不用每次判断重复解析
- 第二步判重:直接判断两个集合是否存在交集,无交集返回
true(可合并),有交集返回false(不可合并)
几乎所有编程语言都有内置的集合交集判断方法,比如Python的set.isdisjoint()、Java的Collections.disjoint(),VBA/Excel场景可以用字典对象实现集合功能。
其他思路的问题
- 平方和求和对比的思路完全不可行:存在极高概率的哈希冲突,比如
1² + 8² = 4² +7² =65,两组完全不同的数值会得到相同的平方和,会产生大量误判 - 普通动态数组两两对比的效率很低:时间复杂度是O(n*m)(n、m分别是两个Col5的数值数量),数值量大的时候性能会明显下降
极端场景优化方案
如果你的Col5数值范围是可控的(比如最大值不超过1000),可以用位图(BitMap)进一步提速:
- 每个Col5对应一个二进制位串,数值x存在就把第x位设为1
- 两个位串做按位与运算,结果为0就说明无重复,判断耗时是O(1),比集合判断还要快
内容的提问来源于stack exchange,提问作者mounim
相关产品推荐
相关产品推荐

