编辑代码

#include <stdio.h>
#include <stdlib.h>

// 定义区间结构体
typedef struct {
    int start;
    int end;
} Interval;

// 比较函数,用于排序区间
int compare(const void* a, const void* b) {
    Interval* intervalA = (Interval*)a;
    Interval* intervalB = (Interval*)b;
    return intervalA->end - intervalB->end;
}

int interval_covering(Interval intervals[], int n, Interval target) {
    // 对区间按照右端点进行排序
    qsort(intervals, n, sizeof(Interval), compare);

    int count = 0;  // 计数器,记录覆盖区间数量
    int current_end = target.start;  // 当前区间的右端点

    for (int i = 0; i < n; i++) {
        if (intervals[i].start > target.end) {
            break;  // 当前区间的左端点大于目标区间的右端点,结束遍历
        }
        if (intervals[i].end < target.start) {
            continue;  // 当前区间的右端点小于目标区间的左端点,继续遍历下一个区间
        }
        if (intervals[i].start <= current_end) {
            // 当前区间与目标区间相交,将当前区间加入结果集合,更新当前区间的右端点
            count++;
            current_end = intervals[i].end;
        }
    }

    return count;
}

int main() {
    Interval intervals[] = {{1, 3}, {2, 4}, {3, 6}, {5, 7}, {6, 8}};
    int n = sizeof(intervals) / sizeof(intervals[0]);
    Interval target = {2, 6};

    int result = interval_covering(intervals, n, target);
    printf("最小数字间隔: %d\n", result);

    return 0;
}