Uber | Onsite | Generate smallest set
Anonymous User
731

Given a list of ranges of integers R, generate a set S such that

  1. Each range of R has atleast 2 numbers in S
  2. Size of S is minimum possible

Code:

set<int>generateSet(vector<pair<int,int>>&input) {
sort(begin(input),end(input),[](auto const &left, auto const &right) {
return left.second<right.second;
});

vector<int>runningSet;
runningSet.emplace_back(input[0].second-1);
runningSet.emplace_back(input[0].second);

for(int i=1 ;i<input.size();i++) {
if(runningSet.back()<input[i].first) {
runningSet.emplace_back(input[i].second-1);
runningSet.emplace_back(input[i].second);
}
else {
//input[i-1].second>=input[i].first
if(runningSet.back()==input[i].first) {
runningSet.emplace_back(input[i].first+1);
}
}
}
return set<int>(begin(runningSet), end(runningSet));

}
Comments (4)