2 条题解
-
0
使用双指针进行模拟即可。
AC code:
#include <bits/stdc++.h> using namespace std; #define ll long long int main() { int n, k; cin >> n >> k; vector<ll> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a.begin(), a.end()); int max_len = 0; int i = 0; for (int j = 0; j < n; j++) { while (a[j] - a[i] > k) { i++; } if (j - i + 1 > max_len) { max_len = j - i + 1; } } cout << max_len << endl; return 0; } -
0
注意到「最大值与最小值的差」这一函数有单调性,上双指针即可。
#include <bits/stdc++.h> using namespace std; int a[200012]; int main() { int n, k; cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); int r = 1, ans = 1; for (int i = 1; i <= n - 1; i++) { while (r < n && a[r + 1] - a[i] <= k) r++; ans = max(ans, r - i + 1); } cout << ans << endl; return 0; }
- 1
信息
- ID
- 133
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者