Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Пересечение интервалов
- Даны два отсортированных списка с интервалами присутствия пользователей в онлайне. Найти список интервалов когда оба пользователя были в онлайне.
- Пример:
- [[8, 12], [17, 22]],[[5, 11], [14, 18], [20, 23]] => [[8, 11], [17, 18], [20, 22]]
- */
- // линейное время
- function crossInterval(user1, user2) {
- const list = [];
- let i1 = 0;
- let i2 = 0;
- while (i1 < user1.length && i2 < user2.length) {
- const start = Math.max(user1[i1][0], user2[i2][0]);
- const end = Math.min(user1[i1][1], user2[i2][1]);
- if (end > start) {
- list.push([start, end]);
- }
- user1[i1][1] < user2[i2][1] ? ++i1 : ++i2;
- }
- return list;
- }
- // Квадратичное время
- function intersection(user1, user2) {
- const list = [];
- for (const int1 of user1) {
- for (const int2 of user2) {
- const leftOffset = Math.max(int1[0], int2[0]);
- const rightOffset = Math.min(int1[1], int2[1]);
- if (rightOffset > leftOffset) {
- list.push([leftOffset, rightOffset]);
- }
- }
- }
- return list;
- }
- console.log(crossInterval([[8, 12], [17, 22]], [[5, 11], [14, 20]]));
- console.log(crossInterval([[8, 12], [17, 22]], [[13, 15], [14, 20]]));
- console.log(crossInterval([[9, 13], [17, 22]], [[8, 12], [14, 20]]));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement