fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. /* [14:44] Baranwal, Ankur
  7. Tesco has around 3200 stores and more than 10% of the stores have around 80 colleagues each.
  8.  
  9. In a store, a colleague can work for multiple departments. Here are shifts of a colleague in various departments:
  10.  
  11. In Bakery department: From 8 to 10
  12. In Checkout department: From 10 to 12
  13. In Dairy department: From 14 to 19
  14.  
  15. Given the above split of shifts, provide an API/method to return the different shifts of a colleague for the day after merging contiguous shifts. This will be exposed to the colleague in different UI and help them plan their day accordingly.
  16.  
  17. His shift timings in this case are 8 to 12 and 14 to 19. */
  18.  
  19. struct node
  20. {
  21. int start,end;
  22. node(int x1,int y1)
  23. {
  24. start=x1;
  25. end=y1;
  26. }
  27. };
  28.  
  29. bool comp(node*a,node*b)
  30. {
  31. if(a->start == b->start)
  32. {
  33. return a->end < b->end;
  34. }
  35. else
  36. {
  37. return a->start < b->start;
  38. }
  39. }
  40.  
  41. vector<node*> findMergedTimings(vector<node*> timings)
  42. {
  43. vector<node*> mergedTimings;
  44. if(timings.size() == 0)
  45. {
  46. return mergedTimings;
  47. }
  48.  
  49. sort(timings.begin(),timings.end(),comp);
  50.  
  51. mergedTimings.push_back(timings[0]);
  52.  
  53. for(int i=1;i<timings.size();i++)
  54. {
  55. if(mergedTimings.back()->end >= timings[i]->start)
  56. {
  57. mergedTimings.back()->end= max(mergedTimings.back()->end,timings[i]->end);
  58. mergedTimings.back()->start = min(mergedTimings.back()->start,timings[i]->start);
  59. }
  60. else
  61. {
  62. mergedTimings.push_back(timings[i]);
  63. }
  64. }
  65.  
  66. return mergedTimings;
  67. }
  68.  
  69. int main() {
  70.  
  71. vector<node*> timings;
  72. timings.push_back(new node(8,10));
  73. timings.push_back(new node(10,12));
  74. timings.push_back(new node(14,19));
  75.  
  76. vector<node*> mergedTimings = findMergedTimings(timings);
  77.  
  78. for(int i=0;i<mergedTimings.size();i++)
  79. {
  80. cout<<"("<<mergedTimings[i]->start<<","<<mergedTimings[i]->end<<")"<<endl;
  81. }
  82. cout<<endl;
  83.  
  84. timings.clear();
  85. timings.push_back(new node(0,8));
  86. timings.push_back(new node(10,12));
  87. timings.push_back(new node(14,19));
  88.  
  89. mergedTimings = findMergedTimings(timings);
  90.  
  91. for(int i=0;i<mergedTimings.size();i++)
  92. {
  93. cout<<"("<<mergedTimings[i]->start<<","<<mergedTimings[i]->end<<")"<<endl;
  94. }
  95.  
  96.  
  97. cout<<endl;
  98.  
  99. timings.clear();
  100. timings.push_back(new node(0,20));
  101. timings.push_back(new node(10,12));
  102. timings.push_back(new node(14,19));
  103.  
  104. mergedTimings = findMergedTimings(timings);
  105.  
  106. for(int i=0;i<mergedTimings.size();i++)
  107. {
  108. cout<<"("<<mergedTimings[i]->start<<","<<mergedTimings[i]->end<<")"<<endl;
  109. }
  110.  
  111. cout<<endl;
  112.  
  113. timings.clear();
  114.  
  115. mergedTimings = findMergedTimings(timings);
  116.  
  117. for(int i=0;i<mergedTimings.size();i++)
  118. {
  119. cout<<"("<<mergedTimings[i]->start<<","<<mergedTimings[i]->end<<")"<<endl;
  120. }
  121.  
  122.  
  123. cout<<endl;
  124.  
  125. timings.clear();
  126. timings.push_back(new node(9,12));
  127. timings.push_back(new node(0,8));
  128. timings.push_back(new node(14,19));
  129.  
  130. mergedTimings = findMergedTimings(timings);
  131.  
  132. for(int i=0;i<mergedTimings.size();i++)
  133. {
  134. cout<<"("<<mergedTimings[i]->start<<","<<mergedTimings[i]->end<<")"<<endl;
  135. }
  136.  
  137. return 0;
  138. }
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
(8,12)
(14,19)

(0,8)
(10,12)
(14,19)

(0,20)


(0,8)
(9,12)
(14,19)