Skip to content

Instantly share code, notes, and snippets.

@rusdevops
Last active July 25, 2022 21:41
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save rusdevops/d85340e26aeac720c338874492adf637 to your computer and use it in GitHub Desktop.
Save rusdevops/d85340e26aeac720c338874492adf637 to your computer and use it in GitHub Desktop.

XIX Задача о поиске элемента ⭐⭐

Дан упорядоченный массив чисел размером N Нужно реализовать алгоритм поиска вхождения упорядоченного подмассива размера M, где M << N

func isInclude(array int[], subarray []int) bool

assert(isInclude([1, 2, 3, 5, 7, 9, 11], []) == true) 
assert(isInclude([1, 2, 3, 5, 7, 9, 11], [3, 5, 7]) == true) 
assert(isInclude([1, 2, 3, 5, 7, 9, 11], [4, 5, 7]) == false) 

Что хочется увидеть:

  1. Алгоритм со сложность быстрее чем O(N) по времени

II Задача о парковке ⭐⭐

Дана последоватльность пар вида {start, end}

start - время заезда автотранспорта на парковку
end - время выезда автотранспорта с парковки

Нужно найти максимальное количество автотранспорта, находящихся одновременно на парковке

Что хочется увидеть:

  1. Алгоритм с оптимальной реализацией по памяти

I Задача о длиной цепочке единиц ⭐⭐

Дана последоватльность 0 и 1
Нужно найти самую длинную последовательность из 1 (единиц) после удаления любого элемента

func maxOnesAfterRemoveItem([]byte) uint
assert(maxOnesAfterRemoveItem[0,0] == 0)
assert(maxOnesAfterRemoveItem[0,1] == 1)
assert(maxOnesAfterRemoveItem[1,0] == 1)
assert(maxOnesAfterRemoveItem[1,1] == 1)
assert(maxOnesAfterRemoveItem[1, 1, 0, 1, 1] == 4)
assert(maxOnesAfterRemoveItem[1, 1, 0, 1, 1, 0, 1, 1, 1] == 5)
assert(maxOnesAfterRemoveItem[1, 1, 0, 1, 1, 0, 1, 1, 1, 0] == 5)

Что хочется увидеть:

  • Алгоритм со сложностью O(N) по времени и O(1) по памяти

III Задача об удаление лишних пробелов ⭐⭐

Дана строка с избыточным количеством пробелов Нужно удалить лишние пробелы

before: _On__my___home_world
after:  On_my_home_world

Что хочется увидеть:

  • Inplace алгоритм со сложность O(N) по времени и O(1) по памяти

X Задача о строительстве газового трубопровода ⭐⭐

Дана последовательность расстояний расположения домов от шоссе.
Нужно рассчитать расположение газового трубопровода, чтобы стоимость подключения всех домов была минимальна.
Все дома находятся по одну сторону от шоссе. Возможен случай, когда расстояние от дома до шоссе равно 0.

Газовый трубопровод будет строиться параллельно шоссе

func calculateLocation(houses []uint) float

Что хочется увидеть:

  • Алгоритм со сложностью O(N) по времени

XVII Задача о поиске не отсортированного подмассива ⭐⭐

Дана коллекция частично отсортированных целых неотрицательных чисел
Нужно реализовать алгоритм поиска не отсортированного подмассива

func findUnsortedSubarray(array []uint) (left uint, right uint)

Что хочется увидеть:

  • Алгоритм со сложностью по времени не большей, чем O(N)

VII Задача о поиске отрезка с максимальной суммой ⭐⭐

Дана последовательность из целых чисел Нужно найти закрытый интервал с максимальной суммой

assert(findSubarrayWithMaxSum([10, -3, -12, 8, 42, 1, -7, 0, 3]) == {3, 5})
@rusdevops
Copy link
Author

rusdevops commented Jul 1, 2021

Здравствуйте.
Хотел бы задать уточняющий вопрос по задаче "XIX Задача о поиске элемента".

Необходимо ли учитывать порядок (или точнее сгруппированность) элементов подмассива или элементы подмассива могут быть в разных частях массива? В качестве пояснения приведу примеры.

Если решаем без учета порядка элементов:
assert(isInclude([1, 2, 3, 5, 7, 9, 11], [1, 2, 11]) == true)

Если решаем с учетом порядка элементов:
assert(isInclude([1, 2, 3, 5, 7, 9, 11], [1, 2, 11]) == false)

@AnBesp, привет! Если они находятся в разных частях, то мы должны вернуть false

isInclude([1, 2, 3, 5, 7, 9, 11], [1, 2, 11]) == false)

@rusdevops
Copy link
Author

rusdevops commented Jul 1, 2021

Добрый день!

Хотел уточнить по задачке: Задача о длиной цепочке единиц

Получается мне надо удалить любой один элемент и достичь максимальную длину единиц?

@Abdujabbar, добрый!

Нужно найти самую длинную последовательность из 1 (единиц) после удаления любого элемента.
Элемент будет удален, но вам решать какой именно:

1 1 0 - здесь ответ 2, потому что можно удалить 0 и останется 2 единицы.
можно и удалить 1, но в этом случае вы получите последовательность длиной 1, что будет не максимально возможным.

@rusdevops
Copy link
Author

rusdevops commented Jul 1, 2021

@rusdevops, вопрос по задаче "XVII Задача о поиске не отсортированного подмассива". Что возвращать, если такого интервала нет? Например, в полностью отсортированном массиве, или массиве из одного элемента?

@vladimir-gavrilenko, привет!

Можно возвращать то, что подойдет под индикатор данных случаев, к примеру [-1, -1].

@voitenko-lex
Copy link

Добрый день!

Хотел уточнить по задачке: 21195.md Задача о длиной цепочке единиц

Правильно понимаю что в assert ошибка?
assert(maxOnesAfterRemoveItem[1,1] == 1)

Должно быть '==2' ?

@magrif
Copy link

magrif commented Jul 2, 2021

Добрый день!

Хотел уточнить по задачке: 21195.md Задача о длиной цепочке единиц

Правильно понимаю что в assert ошибка?
assert(maxOnesAfterRemoveItem[1,1] == 1)

Должно быть '==2' ?

Нет. Ведь после удаление любого элемента - тут либо первого либо второго - останется всегда только одна единица.

@voitenko-lex
Copy link

Добрый день!
Хотел уточнить по задачке: 21195.md Задача о длиной цепочке единиц
Правильно понимаю что в assert ошибка?
assert(maxOnesAfterRemoveItem[1,1] == 1)
Должно быть '==2' ?

Нет. Ведь после удаление любого элемента - тут либо первого либо второго - останется всегда только одна единица.

Спасибо за ответ.

@a-ovch
Copy link

a-ovch commented Jul 3, 2021

Добрый день!

Вопрос по заданию II Задача о парковке : в формулировке сказано Дана последовательность пар вида {start, end}.

  1. Каким образом задается эта последовательность? Устроит, если это будет файл, внутри которого JSON?
  2. Каков формат даты? Это Timestamp или более человекочитаемый вид, к примеру "2021-01-12 20:00:00"?

@kogemrka
Copy link

kogemrka commented Jul 5, 2021

Добрый день! Вопросы про задачу "X Задача о строительстве газового трубопровода":

  • Последовательность расстояний является отсортированной?
  • Подойдёт ли время работы O(n) в среднем или требуется детерменированное O(n)?

@lagstorm
Copy link

lagstorm commented Jul 8, 2021

Добрый день, подскажите пожалуйста по задачке "XVII Задача о поиске не отсортированного подмассива"
Нужно вернуть первый не отсортированный подмассив? или нужно брать пересечение всех не отсортированных?
[1-2-3-44-46-5-6-7-8-34-3-4-5] => [3,4] , [3,9] или [3,12]

@rusdevops
Copy link
Author

rusdevops commented Jul 8, 2021

Добрый день!

Вопрос по заданию II Задача о парковке : в формулировке сказано Дана последовательность пар вида {start, end}.

  1. Каким образом задается эта последовательность? Устроит, если это будет файл, внутри которого JSON?
  2. Каков формат даты? Это Timestamp или более человекочитаемый вид, к примеру "2021-01-12 20:00:00"?

Добрый день 👋

  1. Это может быть и массив пар в памяти. Важен алгоритм.
  2. Это может быть timestamp

@rusdevops
Copy link
Author

Добрый день, подскажите пожалуйста по задачке "XVII Задача о поиске не отсортированного подмассива"
Нужно вернуть первый не отсортированный подмассив? или нужно брать пересечение всех не отсортированных?
[1-2-3-44-46-5-6-7-8-34-3-4-5] => [3,4] , [3,9] или [3,12]

Добрый день 👋

Посмотри пожалуйста вторую формулировку той же задачи:
https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#gistcomment-3799156

@xess777
Copy link

xess777 commented Jul 15, 2021

Добрый день!

Просьба уточнить условия по задаче https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#file-21285-md

Дана строка с избыточным количеством пробелов Нужно удалить лишние пробелы

before: _On__my___home_world
after: On_my_home_world

В задаче нужно удалить лишние пробелы, но в примере знак нижнего подчеркивания. В примере это просто для наглядности? Удалять всё-таки нужно пробелы?

@whdigger
Copy link

Добрый день, есть не большее уточнение по задаче "XIX Задача о поиске элемента".
Алгоритм со сложность быстрее чем O(N) - не может быть, так как в задаче используется поиск подмассива в массиве. Решение в лоб даст сложность O(N*M)

@VYBel
Copy link

VYBel commented Jul 15, 2021

Добрый день! Есть пара вопросов по задаче "XVII Задача о поиске не отсортированного подмассива". Уточните, пожалуйста

  1. Известно ли, что массив отсортирован по возрастанию, либо надо учитывать возможность обоих вариантов сортировки?
  2. Как интерпретировать условие задачи для такого входного массива: [1, 2, 3, 101, 4, 5]?
    вариант 1) удаляем элемент с индексом 3, получаем отсортированный массив [1, 2, 3, 4, 5]
    вариант 2) сортируем массив по возрастанию, получаем [1, 2, 3, 4, 5, 101], сравниваем с исходным и оставляем в итоге только первые три элемента [1, 2, 3] (этот вариант следует из формулировки задачи в комментарии https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#gistcomment-3799156)

@rusdevops
Copy link
Author

rusdevops commented Jul 16, 2021

X Задача о строительстве газового трубопровода ⭐⭐

  1. Как я понял шоссе - это прямая, не окружность, кривая и т.д. и т.п. Соответственно газопровод тоже. Это так?

да

  1. На стоимость газопровода влияет только его длинна?

да

@rusdevops
Copy link
Author

Добрый день, есть не большее уточнение по задаче "XIX Задача о поиске элемента".
Алгоритм со сложность быстрее чем O(N) - не может быть, так как в задаче используется поиск подмассива в массиве. Решение в лоб даст сложность O(N*M)

Массивы упорядочены в одном направление

@rusdevops
Copy link
Author

rusdevops commented Jul 16, 2021

Добрый день!

Просьба уточнить условия по задаче https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#file-21285-md

Дана строка с избыточным количеством пробелов Нужно удалить лишние пробелы
before: _On__my___home_world
after: On_my_home_world

В задаче нужно удалить лишние пробелы, но в примере знак нижнего подчеркивания. В примере это просто для наглядности? Удалять всё-таки нужно пробелы?

Нужно удалить пробелы, и да, для наглядности используется знак _ 🙂

@xess777
Copy link

xess777 commented Jul 16, 2021

Добрый день!

Просьба уточнить условия по задаче https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#file-21285-md

Дана строка с избыточным количеством пробелов Нужно удалить лишние пробелы

before: _On__my___home_world
after: On_my_home_world

В строке могут быть знаки пунктуации? Например, точка, запятая, знак вопроса, восклицательный знак? Нужно ли их тоже учитывать при реализации алгоритма?

@rusdevops
Copy link
Author

Добрый день!

Просьба уточнить условия по задаче https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#file-21285-md

Дана строка с избыточным количеством пробелов Нужно удалить лишние пробелы
before: _On__my___home_world
after: On_my_home_world

В строке могут быть знаки пунктуации? Например, точка, запятая, знак вопроса, восклицательный знак? Нужно ли их тоже учитывать при реализации алгоритма?

Добрый 👋
Не нужно, удаляем только пробелы 🙂

@rusdevops
Copy link
Author

Добрый день!

Есть пара вопросов по задаче "XVII Задача о поиске не отсортированного подмассива". Уточните, пожалуйста
Известно ли, что массив отсортирован по возрастанию, либо надо учитывать возможность обоих вариантов сортировки?
Как интерпретировать условие задачи для такого входного массива: [1, 2, 3, 101, 4, 5]?
вариант 1) удаляем элемент с индексом 3, получаем отсортированный массив [1, 2, 3, 4, 5]
вариант 2) сортируем массив по возрастанию, получаем [1, 2, 3, 4, 5, 101], сравниваем с исходным и оставляем в итоге только первые три элемента [1, 2, 3] (этот вариант следует из формулировки задачи в комментарии https://gist.github.com/rusdevops/d85340e26aeac720c338874492adf637#gistcomment-3799156)

Добрый 👋
Считаем, что оба массива отсортированы по возрастанию.
Для входного массива: [1, 2, 3, 101, 4, 5] результатом будет {3, 5}
А именно считаем, что не отсортированный подмассив это [101, 4, 5]

@BayanAktanova
Copy link

Добрый день!

У меня вопрос по задаче "II Задача о парковке". Мне не понятно что имеется ввиду под словом одновременно?!
Например, есть 3 машины с интервалами [3,8] [4, 6] [5, 7]. Все они пересекаются на [5,6]. Можно ли считать это одновременно?

Спасибо заранее за ответ :)

@rusdevops
Copy link
Author

Добрый день!

У меня вопрос по задаче "II Задача о парковке". Мне не понятно что имеется ввиду под словом одновременно?!
Например, есть 3 машины с интервалами [3,8] [4, 6] [5, 7]. Все они пересекаются на [5,6]. Можно ли считать это одновременно?

Спасибо заранее за ответ :)

Добрый 👋 Можно.

@Artysap
Copy link

Artysap commented Jul 19, 2021

Здравствуйте!
Задача о строительстве газового трубопровода.
Правильно ли я понимаю, что массив значений расстояний домов от шоссе неотсортирован?
Если нет, то сложность может быть O(N*M)?

@rusdevops
Copy link
Author

Здравствуйте!
Задача о строительстве газового трубопровода.
Правильно ли я понимаю, что массив значений расстояний домов от шоссе неотсортирован?
Если нет, то сложность может быть O(N*M)?

Что хочется увидеть:

Алгоритм со сложностью O(N) по времени

@hoopershooch
Copy link

По задаче "XVII Задача о поиске не отсортированного подмассива" - вы уж как то определитесь в формулировкой: либо результат это начальный и конечный индекс подмассива, который нужно убрать чтобы остался отсортированный массив, или результат начальный и конечный индекс подмассива который изменит индексы при сортировке!! Например мою функцию, которая возвращает {1,2} для массива array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9}, объявили неверной, хотя: {2, [1, 0,] 3, 4, 5, 6, 7, 8, 9} -> {2,3,4,5,6,7,8,9}

цитата:
"...К сожалению, тестовое задание решено неверно: не проходят тесты, пример
array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9},
expected: []int{0, 2}..."
и еще:
"...В ответ должны быть включены элементы, которые при сортировке поменяют свой индекс:

{[2, 1, 0], 3, 4, 5, 6, 7, 8, 9} -> {[0, 1, 2], 3, 4, 5, 6, 7, 8, 9}..."

как в известной поговорке: "чувствую, что где то нае*али но не пойму где"

@xess777
Copy link

xess777 commented Aug 6, 2021

По задаче "XVII Задача о поиске не отсортированного подмассива" - вы уж как то определитесь в формулировкой: либо результат это начальный и конечный индекс подмассива, который нужно убрать чтобы остался отсортированный массив, или результат начальный и конечный индекс подмассива который изменит индексы при сортировке!! Например мою функцию, которая возвращает {1,2} для массива array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9}, объявили неверной, хотя: {2, [1, 0,] 3, 4, 5, 6, 7, 8, 9} -> {2,3,4,5,6,7,8,9}

цитата:
"...К сожалению, тестовое задание решено неверно: не проходят тесты, пример
array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9},
expected: []int{0, 2}..."
и еще:
"...В ответ должны быть включены элементы, которые при сортировке поменяют свой индекс:

{[2, 1, 0], 3, 4, 5, 6, 7, 8, 9} -> {[0, 1, 2], 3, 4, 5, 6, 7, 8, 9}..."

как в известной поговорке: "чувствую, что где то нае*али но не пойму где"

Здесь большинство задач с неполными данными. Советую уточнять ТЗ с тест кейсами. Возможно в этом и была задумка авторов, всё как в реальном мире.

@mikhdm
Copy link

mikhdm commented Aug 9, 2021

Добрый вечер! В XIX задаче о поиске элемента у нас могут быть повторяющиеся элементы в обоих массивах (array, subarray)?

@rusdevops
Copy link
Author

rusdevops commented Aug 16, 2021

По задаче "XVII Задача о поиске не отсортированного подмассива" - вы уж как то определитесь в формулировкой: либо результат это начальный и конечный индекс подмассива, который нужно убрать чтобы остался отсортированный массив, или результат начальный и конечный индекс подмассива который изменит индексы при сортировке!! Например мою функцию, которая возвращает {1,2} для массива array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9}, объявили неверной, хотя: {2, [1, 0,] 3, 4, 5, 6, 7, 8, 9} -> {2,3,4,5,6,7,8,9}

цитата:
"...К сожалению, тестовое задание решено неверно: не проходят тесты, пример
array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9},
expected: []int{0, 2}..."
и еще:
"...В ответ должны быть включены элементы, которые при сортировке поменяют свой индекс:

{[2, 1, 0], 3, 4, 5, 6, 7, 8, 9} -> {[0, 1, 2], 3, 4, 5, 6, 7, 8, 9}..."

Исходная формулировка

Дана коллекция частично отсортированных целых неотрицательных чисел
Нужно реализовать алгоритм поиска не отсортированного подмассива

@hoopershooch, не ясно откуда у вас появилась данная формулировка

... нужно убрать чтобы остался отсортированный массив

Корректные тестовые данные

array: []int{2, 1, 0, 3, 4, 5, 6, 7, 8, 9},
expected: []int{0, 2}..."

@rusdevops
Copy link
Author

rusdevops commented Aug 16, 2021

Здесь большинство задач с неполными данными. Советую уточнять ТЗ с тест кейсами. Возможно в этом и была задумка авторов, всё как в реальном мире.

Да. Один из лучших индикаторов для middle+ специалистов. При этом в описание все же присутствует необходимый набор формулировок для правильного решения.

@rusdevops
Copy link
Author

Добрый вечер! В XIX задаче о поиске элемента у нас могут быть повторяющиеся элементы в обоих массивах (array, subarray)?

Доброе утро, да 🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment