双指针,i = 0, j = 1
当j指向的元素与i指向的元素差值小于等于k时,j不断地向前移动
直到指向一个差值大于k的值 i向前移动一位
假设这个时候差值又变成小于等于k的情况,j继续向前移动 不断更新max 直到遍历完整个数组
最终找到整个数组最长的相减不超过k的数列
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int a[n];
for(int i = 0; i < n; i ++) cin >> a[i];
sort(a, a + n);
int max = 1;
int i = 0, j = 1;
while(j < n){
if(a[j] - a[i] <= k) {
if(max < j - i + 1)
max = j - i + 1;
j ++;
}
else if(i < j){
i ++;
}
}
cout << max << endl;
return 0;
}

京公网安备 11010502036488号