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