求两列整数中差值绝对值为1的数值计数公式
统计两列整数中差值绝对值为1的数对数量的高效方法
核心逻辑(替代900次逐一匹配)
不用暴力遍历所有组合,换个思路就能大幅减少工作量:
- 把其中一列的所有数值整理成可快速查询的列表/集合(如果列内有重复值要保留,比如列A有两个588,那列B的587能匹配两次)
- 遍历另一列的每个数值,检查该数值的
+1和-1是否存在于第一列中,每找到一次就给计数器加1
公式化表达
设:
- 列A的数值集合(含重复则为多重集合)为 ( S_A )
- 列B的数值列表为 ( B = [b_1, b_2, ..., b_n] )(n约30)
符合条件的数对总数为:
[
count = \sum_{i=1}^n \left( \text{1 if } (b_i + 1 \in S_A) \text{ else 0} \right) + \sum_{i=1}^n \left( \text{1 if } (b_i - 1 \in S_A) \text{ else 0} \right)
]
手动计算简化技巧
如果不想用工具,手动操作也能省时间:
- 先把列A的数值按从小到大排序,方便快速定位查找
- 对列B的每个数 ( b ),直接在排序后的列A里数出 ( b+1 ) 和 ( b-1 ) 的出现次数,把次数累加到总计数里
- 比如列A排序后是[12,588,588,700],列B的数是587,那能找到2个588,就给总计数加2
内容的提问来源于stack exchange,提问作者bluetick
相关产品推荐
相关产品推荐

