题解 | #相差不超过k的最多数#
相差不超过k的最多数
https://www.nowcoder.com/practice/562630ca90ac40ce89443c91060574c6
//双指针
/*先对数组进行排序,在头部定义两个指针
一个指向当前数,一个不停向后查找与当前数相差小于k的数
如果第二个指针走不动了,就移到当前数。
最后在加上一些终止的细节处理
*/
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin>>n>>k;
vector<int> vec;
int ai;
for(int i=0;i<n;++i){
cin>>ai;
vec.push_back(ai);
}
sort(vec.begin(), vec.end());
int left = 0;
int right = left;
int ans=1,cnt=0;
while(left<=right){
if(right==vec.size()){
ans = max(ans,cnt);
break;
}
if(vec[right]-vec[left]>k){
ans = max(ans,cnt);
++left;
cnt = cnt-1;
continue;
}
++right;
++cnt;
}
cout<<ans;
return 0;
}
// 64 位输出请用 printf("%lld")