链接:https://ac.nowcoder.com/acm/contest/20960/1038
来源:牛客网
	
		
	
		
			
				
			
			
				
			
			
				
		
	
                        来源:牛客网
题目描述
你的团队中有 nnn 个人,每个人有一个能力值 aia_iai,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 kkk ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?
输入描述:
第一行一个整数 TTT,表示案例组数。
每个案例有两行:
第一行两个正整数 n,kn,kn,k ,表示人的数量。
第二行n个以空格分隔的整数 aia_iai ,表示每个人的能力值。
输出描述:
每个案例输出一行,表示可以参加比赛的最多人数。
			示例1
		
		输入
1 5 3 8 3 5 1 6
输出
3
说明
选择能力值为 3,5,63,5,63,5,6 或者 5,6,85,6,85,6,8将原序列排序后可以发现结果一定是排序后的某个连续的序列。所以使用尺取法即可快速解出。
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5;
int a[MAXN];
int main() {
    int T;
    cin>>T;
    while (T--) {
        int n, k;
        cin>>n>>k;
        for (int i=0;i<n;i++) {
            cin>>a[i];
        }
        sort(a, a+n);
        int l=0, r=0;
        int cnt = 0, ans = 0;
        while (l<=r&&l<n&&r<n) {
            if (a[r]-a[l]<=k) {
                cnt++;
                ans = max(ans, cnt);
                r++;
            } else {
                l++;
                cnt--;
            }
        }
        cout<<ans<<endl;
    }
    
    return 0;
}

 京公网安备 11010502036488号
京公网安备 11010502036488号