宝箱|双指针
2026-04-05 19:33:20
发布于:河北
6阅读
0回复
0点赞
废话少说,上代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n=0,k=0; // n为数组长度,k为最大差值限制
cin>>n>>k;
vector<int> a(n); // 存储输入的数组元素
for(int i=0;i<n;++i)
cin>>a[i]; // 输入数组元素
sort(a.begin(),a.end()); // 对数组进行排序,便于后续处理
long long max_sum=0; // 记录满足条件的最大子数组和
for(int i=0;i<n;++i){ // 枚举每个可能的起始位置
int left=i,right=i; // 定义滑动窗口的左右边界
// 扩展右边界,直到窗口内最大值与最小值的差超过k
while(right<n&&a[right]-a[left]<=k)
right++;
long long current_sum=0; // 计算当前窗口内的元素和
for(int j=left;j<right;++j)
current_sum+=a[j];
max_sum=max(max_sum,current_sum); // 更新最大和
}
cout<<max_sum; // 输出结果
return 0;
}
这里空空如也








有帮助,赞一个