2037-今年暑假不AC(java)

在这里插入图片描述
在这里插入图片描述
思路:可以将所有节目的终止时间排序,然后再从第一个节目开始,用第一个节目的终止时间与下一个节目的起始时间相比,如果下一个节目的起始时间大于第一个节目的终止时间说明第一个节目可完整播放,依次有序进行比较即可。

import java.util.*;
public class Main{
    
                         //简单的贪心算法,归类练习更有效
public static void main(String[] args) {
    
    
	Scanner a=new Scanner(System.in);
	while(a.hasNext())
	{
    
    
		int n=a.nextInt();
		if(n==0)
			break;
		else if(n<=100)
		{
    
    
			int[][] arr=new int[n][2];		//建立一个二维数组,将时间点开始与终点放进去
			for(int i=0;i<n;i++)
			{
    
    
				arr[i][0]=a.nextInt();
				arr[i][1]=a.nextInt();
			}
			for(int i=0;i<n-1;i++)          //n-1的原因是确保j小于n
			{
    
    
				for(int j=i+1;j<n;j++)		//这两个for是将所有节目的终点时间从小打到进行排序遍历
				{
    
    
					if(arr[i][1]>arr[j][1])
					{
    
    
						int t=arr[i][1];	//将小的终点节目的那一对时间放到前面
						arr[i][1]=arr[j][1];
						arr[j][1]=t;
						int m=arr[i][0];
						arr[i][0]=arr[j][0];
						arr[j][0]=m;
					}
				}
			}
			int count=1;
			int s=arr[0][1];				//这一步是将第一个节目的开始时间赋予S。
			for(int i=1;i<n;i++)
			{
    
    
				if(arr[i][0]>=s)			//每一对节目的开始时间有序的与第一个节目的开始时间进行比较
				{
    
    
					count++;
					s=arr[i][1];			//如果时间合适可以看完上一个节目时,将下一个节目的终点时间赋予S
				}
			}
			System.out.println(count);		//输出即可
		}
	}
}
}

若有错误,还请指正。

猜你喜欢

转载自blog.csdn.net/weixin_45956604/article/details/114603372
今日推荐