酷代码 AI
菜单
服务商

双指针法高效求解两个有序数组的距离,附代码与案例解析

数组的距离定义为两个有序数组中任意一对元素之差的绝对值的最小值。由于数组已经按升序排列,可以使用双指针法高效求解。 解题思路 维护两个指针分别指向两个数组的当前元素。比较两个元素的大小: - 若 `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]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]