双指针法高效求解两个有序数组的距离,附代码与案例解析
数组的距离定义为两个有序数组中任意一对元素之差的绝对值的最小值。由于数组已经按升序排列,可以使用双指针法高效求解。 解题思路 维护两个指针分别指向两个数组的当前元素。比较两个元素的大小: - 若 `f[i] < g[j]`,则将 `i` 右移,因为更大的 `f[i]` 可能更接近 `g[j]` - 否则将 `j` 右移 在移动过程中不断更新最小绝对差。 代码实现(C++) ```cpp #include <iostream> #include <vector> #include <climits> #include <cmath> using namespace std; int main() { int m, n; cin >> m >> n; vector<long long> f(m), g(n); for (int i = 0; i < m; ++i) cin >> f[i]; for (int j = 0; j < n; ++j) cin >> g[j]; int i = 0, j = 0; long long minDiff = LLONG_MAX; while (i < m && j < n) { long long diff = abs(f[i] - g[j]); if (diff < minDiff) minDiff = diff; if (f[i] < g[j]) ++i; else ++j; } cout << minDiff << endl; return 0; } ``` 样例解析 输入: - f = [1, 4, 10] - g = [-1, 3, 7] 计算过程: - |1 - (-1)| = 2 - |1 - 3| = 2 - |4 - 3| = 1 ← 当前最小 - |4 - 7| = 3 - |10 - 7| = 3 最终输出最小值:1 时间复杂度:O(m + n) 空间复杂度:O(1) ######[AI问答 | 445点数解答 | 2026-01-08 12:23:38]
- 易语言代码优化:自动出售物资子程序整合与优化全解析(DeepSeek | 2181点数解答 | 2025-07-23 10:26:29)214
- C++ 实现:按顺序存储并输出战力 1 - 10 守卫数量(DeepSeek | 130点数解答 | 2026-01-17 14:11:22)50
- C++实现按战力顺序输出守卫数量(字节豆包 | 185点数解答 | 2026-02-25 22:33:20)23
- C++实现按战力顺序输出守卫数量(字节豆包 | 497点数解答 | 2026-03-20 20:01:06)6
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)163
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)277
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)307
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)13
- Matlab 实现遗传算法求解图最短路径:参数设置与关键操作解析(字节豆包 | 128点数解答 | 2024-11-25 02:48:03)186
- MATLAB代码:修正遗传算法初始化种群代码,解决潜在错误(字节豆包 | 360点数解答 | 2024-11-25 02:48:49)196
- C++代码实现计算骑行总时间及详细解析(字节豆包 | 460点数解答 | 2026-03-03 19:51:23)18
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)391