题解 | 夜揽星河入梦

夜揽星河入梦

https://www.nowcoder.com/practice/6b2af10bf2cd413cbda42ee261cb6f7b

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define endl '\n'

void solve()
{
   int n,m;
   cin>>n>>m;
   if(m>n+1)
   {
    cout<<"NO"<<endl;
    return;
   }
   int a[n+1];
   for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1);
    int l=1,r=1;
    int ans=1;
    int cnt=0;
    for(r=2;r<=n;r++)
    {
        if(a[r]-a[r-1]>2)
        {
            cnt=0;
            l=r;
        }
        else
        {
            if(a[r]-a[r-1]==2)
                cnt++;
            while(cnt>1)
            {
                if(a[l+1]-a[l]>1)
                    cnt--;
                l++;
            }
            ans=max(ans,r-l+1);
        }

    }
    if(ans>=m-1)
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--)
        solve();
    return 0;
}

双指针,需要注意的是当有两个差大于1时,两个填充都要考虑

全部评论

相关推荐

04-15 20:51
门头沟学院 Java
纳斯卡可:把名字改一下吧 千万级用户你真测过吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务