Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //user1 [(8, 12), (17, 22)]
- //user2 [(5, 11), (14, 18), (20, 23), (42, 55)]
- //=> [(8, 11), (17, 18), (20, 22)]
- //user1 [(8, 15), (17, 22)]
- //user2 [(5, 11), (14, 18), (20, 23), (42, 55)]
- //=> [(8, 11), (14, 15), (17, 18), (20, 22)]
- //user1 [(8, 10), (13, 15)]
- //user2 [(11, 12), (16, 18)]
- //=> []
- //user1 [(8, 20), (21, 25)]
- //user2 [(11, 12), (16, 18)]
- //=> [(11,12),(16,18)]
- private static (int start, int end)? GetIntersec((int start, int end) first, (int start, int end) second)
- {
- if (first.end < second.first || second.end < first.start)
- {
- return null;
- }
- return (Math.Max(first.start, second.start), Math.Min(first.end, second.end));
- }
- private static List<(int start, int end)> IntersecIntervals((int start, int end)[] user1, (int start, int end)[] user2)
- {
- var intervals = new List<(int start, int end)>();
- var first = 0;
- var second = 0;
- while (first < user1.Length && second < user2.Length)
- {
- var interval = GetIntersec(user1[first], user2[second]);
- if (interval != null)
- {
- intervals.Add(interval);
- }
- var edge = Max.Min(user1[first].end, user2[second].end);
- if (user1[first].end == edge)
- {
- first++;
- }
- if (user2[second].end == edge)
- {
- second++;
- }
- }
- return intervals;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement