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 if cmin == b: j++ else k++
    • 返回 min_range * 2 作为最终结果