T41 对于 3 个非空升序整数集合 计算并输出所有可能三元组的最小距离
- 最小距离
- 定义三元组 的距离为
- 化简:
- 可以通过设 证明
- 三指针法:不断地“提升”当前三元组中的最小值,来尝试缩小最大值与最小值之间的差距
- 分别用指针 指向集合 的当前元素,初始化
min_range为无穷大 - 只要三个指针在有效范围内,就执行以下操作
- 获取当前指针指向的元素
- 计算当前三元组的最小值
cmin = min(a, b, c)和最大值cmax = max(a, b, c) - 更新最小距离
min_range = min(min_range, cmax - cmin) - 移动指针:找出
cmin所在的集合, 将对应指针向后移动一位- if
cmin == a:i++else ifcmin == b:j++elsek++
- if
- 返回
min_range * 2作为最终结果
- 分别用指针 指向集合 的当前元素,初始化