题解 | #相差不超过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; }