2 条题解

  • 0
    @ 2025-12-4 18:11:42

    使用双指针进行模拟即可。

    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
      @ 2025-9-14 21:04:34

      注意到「最大值与最小值的差」这一函数有单调性,上双指针即可。

      #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
      上传者