Balanced Round 题解

发布时间 2023-08-04 21:46:54作者: Dreamer_Boy

原题链接

题目大意

给你一些数,问至少删掉多少数后两两不大于 k。

我们可以画图理解。

最后我们取 max(2,1),由于我们求的是合法的,所以还得用长度减去 2,最终答案就是 2。

根据图我们就知道可以遍历一遍数组,用 t 记录下最长合法序列长度,最后用 n - t 即可。

代码


#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 5;
void work()
{
  int a[N];
  int n, k;
  cin >> n >> k;
  for(int i = 1;i <= n;i ++ ){
    cin >> a[i];
  }
  sort(a + 1, a + 1 + n);
  int maxn = 1;
  for(int i = 2, t = 1;i <= n;i ++ ){
    if(a[i] - a[i - 1] > k) t = 1;
    else t ++;
    maxn = max(maxn, t);
  }
  cout << n - maxn << endl;
}
int main()
{
  int T;
  cin >> T;
  while(T -- ){
    work();
  }
  return 0;
}