C ++会议安排程序
假设我们有两个人的可用时隙列表slot1和slot2,并且会议持续时间为d,我们必须找到适用于他们两个人的最早时隙,其持续时间为d。如果没有满足要求的通用时隙,则显示一个空数组。此处的时隙格式是由两个元素组成的数组[start,end],表示从开始到结束的整个时间范围。我们可以假设,同一个人的两个可用性空缺彼此不相交。也就是说,对于同一个人的任何两个时隙[s1,e1]和[s2,e2],s1>e2或s2>e。因此,如果输入类似于s1=[[10,50],[60,120],[140,210]]和s2=[[0,15],[60,70]]且持续时间=8,则输出将为[60,68]。
为了解决这个问题,我们将遵循以下步骤-
i:=0和j:=0,建立一个数组ans,对s1和s2进行排序。
而i<s1的大小和j<s2的大小
将start和(start+duration)插入ans数组,然后返回ans。
end:=s1[i,1]和s2[j,1]的最小值
开始:=s1[i,0]和s2[j,0]的最小值
如果结束–开始>=持续时间,则
否则,当s1[i,1]<s2[j,1]时,将i增加1
否则将j增加1
返回ans
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
cout << "[";
for(int i = 0; i<v.size(); i++){
cout << v[i] << ", ";
}
cout << "]"<<endl;
}
using namespace std;
bool cmp(vector <int> a, vector <int> b){
return a[0]<b[0];
}
class Solution {
public:
vector<int> minAvailableDuration(vector<vector<int>>& slots1, vector<vector<int>>& slots2, int duration) {
int i =0;
int j = 0;
vector <int> ans;
sort(slots1.begin(),slots1.end(),cmp);
sort(slots2.begin(),slots2.end(),cmp);
while(i<slots1.size() && j<slots2.size()){
int end = min(slots1[i][1],slots2[j][1]);
int start = max(slots1[i][0],slots2[j][0]);
if(end-start>=duration){
ans.push_back(start);
ans.push_back(start+duration);
return ans;
} else if(slots1[i][1]<slots2[j][1]) {
i++;
} else {
j++;}
}
return ans;
}
};
main(){
vector<vector<int>> v = {{10,50},{60,120},{140,210}};
vector<vector<int>> v1 = {{0,15},{60,70}};
Solution ob;
print_vector(ob.minAvailableDuration(v, v1, 8));
}输入值
[[10,50],[60,120],[140,210]] [[0,15],[60,70]] 8
输出结果
[60, 68, ]