标签:amp 时间复杂度 math span code 现在 最大 复杂 for
你的团队中有 n 个人,每个人有一个能力值 ai?,现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的差值必须要小于等于 k ,为了让更多的人有参加比赛的机会,你最多能选择多少个人参加比赛?
链接:https://ac.nowcoder.com/acm/contest/5158/B
一开始我一直在纠结以哪个点为中心,然后就分别以每个顶点为开头去找最末尾,n2的时间复杂度TL了,后面看大佬的题解,所以可以一遍过就找到最大值-最小值为K的最大成员区间,%%%%%
#include<bits/stdc++.h> using namespace std; int n,T,k; int a[200005]; int ans; int main() { scanf("%d",&T); while(T--) { ans=0; scanf("%d%d",&n,&k); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); int l=0,r=0;//一开始两个指针都指向开头 while(l<=n-1) { while(a[r]-a[l]<=k&&r<=n-1) r++;//当满足时候,r不断往前走直到不满足 ans=max(ans,r-l);//判断下当前是否为最大 l++;//l向前走 } printf("%d\n",ans); } }
标签:amp 时间复杂度 math span code 现在 最大 复杂 for
原文地址:https://www.cnblogs.com/Charls/p/12729126.html