双指针,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;
}