华为机考真题 -- 会议室占用时间

题目描述:

现有若干个会议,所有会议共享一个会议室,用数组表示每个会议的开始时间和结束时间,格式:[[会议 1 开始时间,会议 1 结束时间], [会议 2 开始时间,会议 2 结束时间]]。请计算会议室占用时间段。

输入描述:

[[会议 1 开始时间,会议 1 结束时间], [会议 2 开始时间,会议 2 结束时间]]

补充说明:
1. 会议室个数范围:[1, 100];
2. 会议室时间段:[1, 24];

输出描述:

[[会议开始时间,会议结束时间], [会议开始时间,会议结束时间]],输出格式与输入一致

示例1:

输入
[[1,4],[2,5],[7,9],[14,18]]

输出:
[[1,5],[7,9],[14,18]]

说明:时间段 [1,4] 和 [2,5] 重叠, 合并为 [1,5]

示例2:

输入
[[1,4],[4,5]]

输出
[[1,5]]

说明:时间段 [1,4] 和 [4,5] 连续

C++源码:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;

bool compare(const vector<int>& a, const vector<int>& b) {
    return a[0] < b[0];
}

vector<vector<int>> meetingTime(vector<vector<int>>& meetings) {
    if (meetings.empty()) return {};

    sort(meetings.begin(), meetings.end(), compare);

    vector<vector<int>> mergedMeetings;
    for (const auto& meeting : meetings) {
        if (mergedMeetings.empty() || mergedMeetings.back()[1] < meeting[0]) {
            mergedMeetings.push_back(meeting);
        }
        else {
            mergedMeetings.back()[1] = max(mergedMeetings.back()[1], meeting[1]);
        }
    }

    return mergedMeetings;
}

vector<vector<int>> parseInput(const string& input) {
    vector<vector<int>> meetings;
    vector<int > a,b,meeting;
    stringstream ss(input);
    string temp;
    while (getline(ss, temp, ',')) {
        temp.erase(remove(temp.begin(), temp.end(), '['), temp.end());
        temp.erase(remove(temp.begin(), temp.end(), ']'), temp.end());
        meeting.push_back(stoi(temp));
    }
    for (int i = 0; i < meeting.size(); i++)
    {
        if (i % 2 == 0) {
            a.push_back(meeting[i]);
        }
        else {
            b.push_back(meeting[i]);
        }
    }
    for (int i = 0; i < a.size(); i++)
    {
        meetings.push_back({ a[i], b[i] });
    }
    return meetings;
}

int main() {
    string input;
    cin >> input;

    vector<vector<int>> meetings = parseInput(input);

    vector<vector<int>> result = meetingTime(meetings);
    cout << "[" ;
    for (const auto& interval : result) {
        cout << "[" << interval[0] << ", " << interval[1] << "]";
    }
    cout << "]" << endl;

    system("pause");
    return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为OD考真是指华为公司在招聘过程中所使用的在线考试目。这些目旨在评估应聘者的技术能力、逻辑思维以及解决问的能力。以下是对华为OD考真解读的简要说明。 华为OD考真的内容丰富多样,主要涵盖计算科学、网络技术、算法设计、数据结构等多个领域。对于应聘者来说,这些目不仅要求具备扎实的专业知识,还要求能够将知识应用于实际场景中,并能够灵活运用、创新思考。 在解答华为OD考真时,应聘者需要具备良好的解思路和方法。首先,应聘者需要仔细阅读目,理解意和要求,明确问的关键点。其次,应聘者需要运用所学知识和技能分析问,并制定解决方案。此时,良好的逻辑思维和分析能力是十分重要的。最后,应聘者需要将解决方案转化为具体的代码实现或解步骤,并进行测试和验证。 华为OD考真的目的是为了筛选出具备优秀技术能力和解决问能力的人才。在解过程中,华为注重考察应聘者的创新能力和解决问的能力,不仅关注结果,还关注解决问的思路和方法。因此,应聘者在回答真时除了要给出正确的答案,还需要展现出对问的全面思考和独立思考的能力。 总之,华为OD考真的解答需要应聘者具备扎实的专业知识、良好的解思路、逻辑思维能力和解决问的能力。这些真旨在筛选出具备创新思维和解决问能力的优秀人才。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值