1. 题目描述
给定 n 个整数 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an 和一个 d d d,你需要选出若干整数,使得这些整数从小到大排序后,任意两个相邻的数之差都不小于给定的 d d d ,问最多可选出多少个数。
输入格式
第一行输入两个整数 n , d ( 1 ≤ n ≤ 1 0 5 , 0 ≤ d ≤ 1 0 9 ) n, d (1 \leq n \leq 10^5, 0 \leq d \leq 10^9) n,d(1≤n≤105,0≤d≤109),分别表示整数个数和相邻整数差的下届。
第二行 n n n 个整数 a 1 , a 2 , . . . , a n ( 1 ≤ a i ≤ 1 0 9 , 1 ≤ i ≤ n a_1, a_2, ..., a_n (1 \leq a_i \leq 10^9, 1 \leq i \leq n a1,a2,...,an(1≤ai≤109,1≤i≤n,表示给定的 n n n 个整数。
输出格式
一个整数,表示答案
样例输入
6 2
1 4 2 8 5 7
样例输出
3
2. 我的尝试
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int main() {
int n, d;
int last = -INF;
int res = 0;
vector<int> nums;
cin >> n >> d;
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
nums.push_back(x);
}
sort(nums.begin(), nums.end());
for (int i = 0; i < n; i++) {
if (nums[i] >= last + d) {
res ++;
last = nums[i];
}
}
cout << res;
return 0;
}