题解#1
2026-10-02 06:30:39
发布于:湖南
2阅读
0回复
0点赞
这是一道经典的“最接近的两个数”问题。核心思路是:排序后,最小差值一定出现在相邻元素之间。
思路
1.
将数组排序。
2.
遍历相邻元素,计算差值,记录最小值。
3.
若出现更小的差值,更新答案;若差值相等,由于数组已排序,先遇到的相邻对分数一定更小,所以无需额外处理(自然保留第一组)。
4.
输出最小差值和对应的两个数。
时间复杂度,对于完全够用。
C++代码:
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
sort(a.begin(), a.end());
long long minDiff = LLONG_MAX;
long long x = 0, y = 0;
for (int i = 0; i < n - 1; i++) {
long long diff = a[i + 1] - a[i];
if (diff < minDiff) {
minDiff = diff;
x = a[i];
y = a[i + 1];
}
}
cout << minDiff << "\n" << x << " " << y << "\n";
return 0;
}
代码:
import sys
def main():
data = sys.stdin.buffer.read().split()
n = int(data[0])
a = sorted(map(int, data[1:n+1]))
min_diff = float('inf')
x = y = 0
for i in range(n - 1):
diff = a[i+1] - a[i]
if diff < min_diff:
min_diff = diff
x, y = a[i], a[i+1]
print(min_diff)
print(x, y)
main()
这里空空如也





有帮助,赞一个