题解 | 空调遥控(二分)

空调遥控

https://www.nowcoder.com/practice/7cb58d56b30c4280ac07ae4428022e03

其实用二分也可以

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

bool check(int count, int n, int limit, const vector<int>& a) 
{
    for (int i = 0; i + count - 1 < n; ++i) 
    {
        if (a[i + count - 1] - a[i] <= limit) 
        {
            return true;
        }
    }
    return false;
}

int main()
{
    int n,p;
    cin >> n >> p;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a.begin(),a.end());

    int l=1,r=n,ans = 1;
    int limit = 2*p;

    while(l<=r)
    {
        int mid = l + (r-l)/2;
        if(check(mid,n,limit,a))
        {
            ans = mid;
            l = mid+1;
        }
        else
        {
            r = mid-1;
        }
    }

    cout << ans << endl;
    
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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