双指针法高效求解两个有序数组的距离,附代码与案例解析
数组的距离定义为两个有序数组中任意一对元素之差的绝对值的最小值。由于数组已经按升序排列,可以使用双指针法高效求解。 解题思路 维护两个指针分别指向两个数组的当前元素。比较两个元素的大小: - 若 `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)264
- C++ 实现:按顺序存储并输出战力 1 - 10 守卫数量(DeepSeek | 130点数解答 | 2026-01-17 14:11:22)86
- C++实现按战力顺序输出守卫数量(字节豆包 | 185点数解答 | 2026-02-25 22:33:20)57
- C++实现按战力顺序输出守卫数量(字节豆包 | 497点数解答 | 2026-03-20 20:01:06)39
- 小核桃存储守卫战力数量的Python程序实现(字节豆包 | 150点数解答 | 2026-04-03 19:47:58)48
- 使用C++实现存储守卫战力并按顺序输出的程序(字节豆包 | 224点数解答 | 2026-04-12 19:13:22)28
- C++实现按战力顺序输出守卫数量(字节豆包 | 178点数解答 | 2026-05-16 20:40:13)19
- C++实现按战力顺序输出守卫数量的程序及开发建议(字节豆包 | 650点数解答 | 2026-05-16 21:25:38)27
- C++ 实现存储并输出不同战力守卫数量(字节豆包 | 393点数解答 | 2026-05-30 19:39:09)19
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)195
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)340
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)358