要使L值越小,我们容易知道,只有连续几个相邻的数才会使L最小。
因此,我们第一步应该把输入的数据排序,这里直接调用一个sort排序即可。
排序完成之后,我们只需要从左右依次选择m个进行计算即可。
英文有了从小到大的排序,所以 B[i+1]>B[i] ,因此,这里的绝对值符号可以直接去除,而 m 个数相加也可以进行简化。
由此可以得知, 代码相对较简单,代码如下:
cpp
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 10;
int B[N];
signed main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> B[i];
}
//排序
sort(B, B + n);
int ans = 1e10;
//计算和,每次取最小的
for (int i = 0; i < n - m + 1; i++)
{
ans = min(ans,B[i + m - 1] * B[i + m - 1] - B[i] * B[i]);
}
cout << ans;
}