酷代码 AI
菜单
服务商

高效求解:两个有序数组间最小绝对差的程序实现与验证

```cpp #include <iostream> #include <vector> #include <cstdlib> #include <algorithm> 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 i = 0; i < n; i++) { cin >> g[i]; } int i = 0, j = 0; long long min_diff = abs(f[i] - g[j]); while (i < m && j < n) { long long diff = abs(f[i] - g[j]); if (diff < min_diff) { min_diff = diff; } if (f[i] < g[j]) { i++; } else { j++; } } cout << min_diff << endl; return 0; } ``` --- ✅ 程序说明 - 输入处理:读取两个数组长度 `m` 和 `n`,然后读入两个升序数组 `f[]` 和 `g[]`。 - 双指针扫描:利用数组有序特性,使用两个指针从头开始遍历。 - 更新最小差值:每次计算 `|f[i] - g[j]|`,并维护最小值。 - 移动规则:较小元素对应的指针前移,以寻找更接近的数值对。 - 输出结果:最终输出最小绝对差。 --- 📌 示例验证 输入: ``` 3 3 1 4 10 -1 3 7 ``` 执行过程: | i | j | f[i] | g[j] | |f[i]-g[j]| | 更新 min_diff | 移动 | |---|---|------|------|------------|----------------|--------| | 0 | 0 | 1 | -1 | 2 | 2 | i→ | | 1 | 0 | 4 | -1 | 5 | — | j→ | | 1 | 1 | 4 | 3 | 1 | 1 | — | | ... | | | | | | | 后续差值均 ≥1 → 输出 `1` ✅ --- ⚠️ 注意事项 - 使用 `long long` 防止差值溢出(因数据范围达 ±10⁹) - 初始差值设为 `abs(f[0]-g[0])` - 不要累加、不要乘积、不要输出中间信息 - 只输出一个整数 --- 替换你当前错误代码为此版本,即可通过全部测试点。 ######[AI问答 | 632点数解答 | 2026-01-08 12:20:05]

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