您的位置:首页 > 其它

Sicily 会议安排 | 算法期末机考模拟题

2017-07-06 21:10 169 查看

Description

N个会议要同时举行,参会人数分别为A[0], A[1], …, A[N-1]. 现有M个会议室,会议室可容纳人数分别为B[0], B[1], …, B[M-1]. 当A[i]<=B[j]时,可以把会议i安排在会议室j,每间会议室最多安排一个会议,每个会议最多只能安排一个会议室. 求最多安排多少个会议.

1 <= N, M <= 100000, 每个会议的参会人数和每间会议室的容纳人数均在1和1000之间.

请为下面的Solution类实现解决上述问题的函数assignConferenceRoom. 函数参数A和B的意义如上,返回值为最多可安排的会议数.

class Solution {
public:
int assignConferenceRoom(vector<int>& A, vector<int>& B) {

}
};


例1:A={2, 3}, B={1, 2},答案为1.

例2:A={3, 4, 5},B={10, 3, 2},答案为2.

Thinking

简单的贪心,为了举办尽可能多的会议,优先满足人数最少的会议。安排会议室时,将会议匹配到能容纳这么多人的最小会议室。将会议按人数,会议室按容量从小到大排序后匹配即可。

一开始我用的是自己写的冒泡排序,超时了,改用快排sort后AC。

Solution

class Solution {
public:
int assignConferenceRoom(vector<int>& A, vector<int>& B) {
int count = 0;
/*for(int i = A.size() - 1; i > 0; i--){
for(int j = 0; j < i; j++){
if(A[j] > A[j + 1]) swap(A[j], A[j + 1]);
}
}
for(int i = B.size() - 1; i > 0; i--){
for(int j = 0; j < i; j++){
if(B[j] > B[j + 1]) swap(B[j], B[j + 1]);
}
} */
sort(A.begin(), A.end());
sort(B.begin(), B.end());
for(int i = 0, j = 0; i < A.size() && j < B.size();){
if(A[i] <= B[j]){
count++;
i++;
j++;
}
else j++;
}
return count;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sicily