[C算法]005-寻找最小的三元组距离
均采用C语言来编写,版本为C17,使用其他版本也可以,仅仅停留在算法层面,各大版本几乎区别不大
题目
2020年真题
定义三元组 的距离 。
给定三个非空整数集合 , 和 ,按升序分别存储在3个数组中。
请设计一个尽可能高效的算法,计算并输出所有可能的三元组 中最小距离。
例如:,则最小距离为2,相应的三元组为 。
分析
这道算法既考察数学洞察力,也考察对双指针(在这里是三指针)技巧的运用。让我们一步步来拆解它。
首先,我们看这个距离公式:。乍一看它包含三个绝对值,计算起来似乎有点繁琐。
为了简化问题,假设
在这种假设下,我们计算得
也就是
然后,题目中确实给了升序的条件,所以我们直接找寻最大值和最小值的差值的最小值即可,应该还是赢容易的,我们只要不断更新最小值(向后移动),不断更新更小的结果,就行。
代码实现
1 |
|
寻找最小值的写法
1 | // 我一开始的错误写法(迷宫一样的 if-else) |
1 | while (i < n_a && j < n_b && k < n_c) { |
- 标题: [C算法]005-寻找最小的三元组距离
- 作者: Lucas
- 创建于 : 2025-12-25 20:35:29
- 更新于 : 2026-01-04 15:56:43
- 链接: https://darkflamemasterdev.github.io/2025/12/25/C算法-005-寻找最小的三元组距离/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论