题解 | #相差不超过k的最多数#

相差不超过k的最多数

https://www.nowcoder.com/practice/562630ca90ac40ce89443c91060574c6

#include <stdio.h>
#include<stdlib.h>

void merge(int *arr,int l,int m,int r)
{
    int templ=l,tempr=m+1,sum=0;
    int *temp=(int *)malloc((r-l+1)*sizeof(int));
    while(templ<=m&&tempr<=r)
    {
        if(arr[templ]>arr[tempr])
        temp[sum++]=arr[templ++];
        else temp[sum++]=arr[tempr++];
    }
    while (templ <= m) { 
        temp[sum++] = arr[templ++];
    }
    while (tempr <= r) { 
        temp[sum++] = arr[tempr++];
    }
    for(int i=0;i<sum;i++)
    {
        arr[l+i]=temp[i];
    }
    free(temp);
}

void msort(int *arr,int l,int r)
{
    int m=l+(r-l)/2;
    if(l<r)
    {
        msort(arr,l,m);
        msort(arr,m+1,r);
        merge(arr,l,m,r);
    }
}

int arr[200000];
int main() 
{
    int n,k;
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    msort(arr,0,n-1);
    int l=0,r=1,mx=0;
    for(int i=l;i<n-1;i++)
    {
        while(r<n&&arr[i]-arr[r]<=k)
        {
            if(r-i+1>mx) mx=r-i+1;
            r++;
        }
    }
    printf("%d\n",mx);
    return 0;
}

全部评论

相关推荐

与火:这不接? 留子的钱不挣白不挣
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务