华为OD【计算观看演唱会场次】【2023 B卷 200分】,能不能看上周杰伦演唱会,就看你自己了

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

为了庆祝中国共产党成立100周年,某公园将举行多场文艺表演,很多演出都是同时进行,一个人只能同时观看一场演出,且不能迟到早退,由于演出分布在不同的演出场地,所以连续观看的演出最少有15分钟的时间间隔。

小明是一个狂热的文艺迷,想观看尽可能多的演出,现给出演出时间表,请帮小明计算他最多能观看几场演出。

二、输入描述

第一行为一个数N,表示演出场数,1 <= N<=1000,接下来N行,每行有被空格分割的两个整数;
第一个整数T表示演出的开始时间,第二个整数L表示演出的持续时间;

T和L的单位为分钟,0 <=T <=1440, 0 <= L <= 100

三、输出描述

输出最多能观看的演出场数。

四、解题思路

  1. 输入演出场数N;
  2. 定义演出开始时间+演出结束时间list集合timeList;
  3. 输入演出的开始时间T;
  4. 输入演出的持续时间L;
  5. 初始化timeList集合,并排序;
  6. 定义最多能观看的演出场数max;
  7. 遍历时间集合timeList;
  8. 连续观看的演出最少有15分钟的时间间隔,观看场次+1;
  9. 输出最多能观看的演出场数

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 演出场数
        int N = sc.nextInt();

        List<int[]> timeList = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            // 演出的开始时间
            int T = sc.nextInt();
            // 演出的持续时间
            int L = sc.nextInt();
            int endTime = T + L;
            timeList.add(new int[]{T, endTime});
        }

        Collections.sort(timeList, new Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                if (a[1] == b[1]) {
                    return b[0] - a[0];
                } else {
                    return b[1] - a[1];
                }
            }
        });

        int startTime = timeList.get(0)[0];
        // 最多能观看的演出场数
        int max = 1;

        for (int[] time : timeList) {
            // 开始时间
            int curStartTime = time[0];
            // 结束时间
            int curEndTime = time[1];

            // 连续观看的演出最少有15分钟的时间间隔
            if (startTime - curEndTime > 15) {
                max++;
                // 重置开始时间
                startTime = curStartTime;
            }
        }

        System.out.println(max);
    }
}

六、效果展示

1、输入

3
100 120
240 150
400 100

2、输出

2

3、说明

  1. 第一场100开始,持续120分钟,结束时220;
  2. 第一场220结束,距离第二场开始时间240,大于15分钟,时间来得及,观看场次+1;
  3. 第二场390结束,距离第三场开始时间400,小于15分钟,来不及了。

华为OD【计算观看演唱会场次】【2023 B卷 200分】,能不能看上周杰伦演唱会,就看你自己了_第1张图片

华为OD【计算观看演唱会场次】【2023 B卷 200分】,能不能看上周杰伦演唱会,就看你自己了_第2张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,开发语言,学习,程序人生)