我们可以将最低要求进行排序,对于每个最低要求,我们找到符合要求的最小值。
C++
#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 5;
int a[M], b[M];
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        scanf("%d", a + i);
    }
    for (int i = 1; i <= n; i++) {
        scanf("%d", b + i);
    }
    sort(a + 1, a + 1 + n); // 排序为了指针能够快速找到第一个大于b[i]的数
    sort(b + 1, b + 1 + n); // 优先给b[i]小的匹配a[i]
    int cnt = 0, idx = 1;
    for (int i = 1; i <= n; i++) {
        for (; idx <= n; idx++) { // 上次比该节点小的本次也会比该节点小
            if (a[idx] >= b[i]) {
                cnt++, idx++;
                break;
            }
        }
    }
    cout << cnt << endl;
    return 0;
}
java
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n + 1];
        int[] b = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            a[i] = scanner.nextInt();
        }
        for (int i = 1; i <= n; i++) {
            b[i] = scanner.nextInt();
        }
        Arrays.sort(a, 1, n + 1); // 排序为了指针能够快速找到第一个大于b[i]的数
        Arrays.sort(b, 1, n + 1); // 优先给b[i]小的匹配a[i]
        int cnt = 0;
        int idx = 1;
        for (int i = 1; i <= n; i++) {
            for (; idx <= n; idx++) { // 上次比该节点小的本次也会比该节点小
                if (a[idx] >= b[i]) {
                    cnt++;
                    idx++;
                    break;
                }
            }
        }
        System.out.println(cnt);
    }
}
python
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
a.sort() # 排序为了指针能够快速找到第一个大于b[i]的数
b.sort() # 优先给b[i]小的匹配a[i]
cnt = 0
idx = 0
for i in range(n):
    for j in range(idx, n):
        if a[j] >= b[i]: # 上次比该节点小的本次也会比该节点小
            idx = j + 1
            cnt += 1 
            break
print(cnt)
        小美家有很多藏品,每个价值ai元。现在小美濒临破产,他准备每天卖掉一个藏品,他每天最少花费bi元。由于小美非常奢侈,他每天会把获得的钱全部花掉。但是他又非常爱这些藏品,所以不愿意一天卖超过一个,如果没有满足今天消费的藏品可卖,那么他宁愿不卖。请问他最多可以卖掉多少藏品。
第一行输入一个整数n(1≤n≤105)。
第二行输入n个整数ai,表示藏品的价值(1≤ai≤109)。
第二行输入n个整数bi,表示每天的最低消费(1≤ai≤109)。
输出一个整数,表示最多可以卖多少个藏品。
输入
4
4 3 2 1
2 2 1 2
输出
4