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 相连的1 | 算法期末机考模拟题
- Sicily 无环图 | 算法期末机考模拟题
- Sicily期末算法模拟题
- Sicilly 等价二叉树 | 算法期末机考模拟题
- 算法作业_44(2017.6.27第十九周)(算法机考模拟题4)
- 会议安排最优算法
- 算法机考模拟题1001.会议安排
- 2017.1.10 算法测试题集 - 1001 - 会议安排问题
- [sicily] 1001. 会议安排
- Sicily 算法模拟题 1001
- [sicily]1001 会议安排
- sicily考试模拟题-1000超级和 1001会议室安排 1002二叉树比较
- 算法作业_35(2017.6.16第十七周)(算法机考模拟题3)
- 【Sicily】1001. 会议安排
- 会议安排最优算法
- C语言贪心算法之会议安排问题
- 【Sicily】1001. 会议安排
- Julie Desk:这个帮你安排会议的AI助手刚刚融了250万欧元
- 数据结构--算法达人修炼学习安排及方法指导
- hdu2037 今年暑假不AC(贪心算法基础--会场安排类似