思路:实质上就是用双指针找区间最大间隔问题 本来想首指针弄完后直接到达尾指针的位置 但是不对 中建还有很多数需要 做 然后感觉首指针从前往后逐渐便利一下就对了 (注意一i啊for循环和while循环的条件)
#include<bits/stdc++.h>
using namespace std;
const int N =1e5+10;
int a[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
int max1=0;
sort(a,a+n);//还得排序
for(int i=0,j=1;i<n;i++)//设置双指针
{
while(a[j]-a[i]<1000&&j<n) j++;//找最大区间间隔 注意判断条件
max1=max(max1,j-i);//那个多加了一在这里少一个加一
if(j>=n-1) break;//到最后结束
}
int res=0;
if(max1%m) res++; //有多余的答案还得加一
res+=max1/m;
cout<<res<<endl;
return 0;
}
该程序使用C++实现,通过双指针法解决寻找数组中最大间隔子区间的题目。首先对数组进行排序,然后用两个指针逐步扩大区间,直到找到的最大间隔满足条件或遍历完整个数组。最后计算满足条件的子区间数量并输出。


333

被折叠的 条评论
为什么被折叠?



