最值问题|双指针(滑动窗口也行😁😁)
2026-04-06 14:51:38
发布于:河北
1阅读
0回复
0点赞
废话少说,上代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
// 取消cin/cout与stdio的同步,提高输入输出效率
ios::sync_with_stdio(false);
// 解除cin与cout的绑定,进一步优化性能
cin.tie(nullptr);
cout.tie(nullptr);
// n: 数组长度, k: 需要选择的元素个数, ans: 最小差值结果(初始化为一个很大的数)
int n=0,k=0,ans=1000000001;
cin>>n>>k; // 输入数组大小和需要选择的元素数量
// 创建大小为n的整型向量
vector<int> a(n);
// 输入n个整数到数组中
for(int i=0;i<n;++i)
cin>>a[i];
// 对数组进行升序排序
sort(a.begin(),a.end());
// 滑动窗口思想:寻找连续k个元素中的最大值与最小值之差的最小值
// i从0遍历到n-k,确保能取到k个连续元素
for(int i=0;i<n-k;++i)
// 更新答案:比较当前答案与第i到i+k-1这k个元素的最大差值
ans=min(ans,a[i+k-1]-a[i]); // a[i+k-1]是区间内最大值,a[i]是最小值
// 输出最小差值
cout<<ans;
return 0;
}
这里空空如也








有帮助,赞一个