看电视节目(贪心算法)

题目描述:

    已经知道了所有你喜欢的电视节目的转播时间表,如何合理安排看尽量多的完整节目?

输入:

    输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的电视节目的总数,然后是n行数据,每行包括两个数据,分别表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数来表示。n=0表示输入结束,不做处理。

输出:

    对于每个测试实例,输出能完整看到的电视节目的个数,每个测试实例的输出占一行。

样例输入:

    12

     1 3

    3 4

    0 7

    3 8

    15 19

    15 20

    10 15

    8 18

    6 12

    5 10

    4 14

    2 9

    0

样例输出:

    5

示例代码:

import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while (scanner.hasNextLine()){ int number = scanner.nextInt(); if (number==0){break;} TVprogram[] tVprograms = new TVprogram[number]; for (int i=0;i<number;i++){ int start_time = scanner.nextInt(); int end_time = scanner.nextInt(); tVprograms[i]=new TVprogram(start_time,end_time); } Arrays.sort(tVprograms,0,number,new cmp()); int start_time_left = 0; int end_time_left = 20;//如果给出收看电视节目的时间段范围,则此句有用 int cnt=0; for (int i=0;i<number;i++){ int stime = tVprograms[i].start_time; int etime = tVprograms[i].end_time; if (stime>=start_time_left){ if (etime<=end_time_left){start_time_left = etime;cnt++;}//同理此处判断条件也是当有时间段范围限制时,需要判断 else {break;}} else {continue;} } System.out.println(cnt); } } } 
public class TVprogram { int start_time; int end_time; public TVprogram(int start_time,int end_time){ this.start_time=start_time; this.end_time=end_time; } } 
import java.util.Comparator; public class cmp implements Comparator<TVprogram> { @Override public int compare(TVprogram o1, TVprogram o2) { if (o1.end_time<o2.end_time){return -1;} else {return 1;} } }

    

    原文作者:贪心算法
    原文地址: https://blog.csdn.net/qq_35490520/article/details/81053966
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞