华为OD机试 - 计算最多能观看几场演出(Java 2023 E卷 200分)

在这里插入图片描述

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

专栏导读

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天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机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

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

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值