区间覆盖问题
给定长度为m的区间,再给出闭区间的n段线段的起点和终点,输出最少使用多少线条可以将整个区间覆盖?
import java.util.ArrayList; public class QuJian { public static void main(String[] args) { int[] S = {1, 2, 3, 3, 6, 2, 3}; int[] F = {4, 6, 6, 7, 8, 4, 5}; int n = 7; greedyEventSchedule(n, S, F); int selected=F[0];//初始边界为最早的起点的终点 int ans=1;//线条数初始为1 int max=1; ArrayList<Integer> kk = new ArrayList<>();//动态数组 while(selected<8) {//边界到达最大终点跳出循环 for (int i = 0; i <n; i++) { if (S[i] <= selected) {//将可以接在此区间的所有区间放在新数组中 kk.add(F[i]); } } for (int j = 0; j < kk.size(); j++) {//排序得出终点最大的区间 if (kk.get(j) > max) { max = kk.get(j); } } selected = max;//将此时的终点当做新的边界 ans++;//线条数加一 } System.out.println(ans); } static void greedyEventSchedule(int n, int[] timeStart, int[] timeFinish) {//失败的排序算法,没有意义,开始时间升序排列 for(int i = 0;i < n - 1;i++){ // 内层循环用于元素的两两比较和交换 for (int j = n - 1;j > i;j--){ // 如果后面的元素较小,则交换 if (timeStart[j] < timeStart[j-1]){ // 两个元素进行交换 swap(timeFinish[j], timeFinish[j-1]); swap(timeStart[j], timeStart[j-1]); } } } } private static void swap ( int x, int y){ int p = x; x = y; y = p; } }
排序算法没有写好,初始边界和最终边界的判断因此有些问题。不过中间的思路很正确。
1070

被折叠的 条评论
为什么被折叠?



