Skip to content

Instantly share code, notes, and snippets.

@lensgolda
Created August 8, 2022 07:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lensgolda/49e6b3c2c41e71eca54c970d36c5e5f4 to your computer and use it in GitHub Desktop.
Save lensgolda/49e6b3c2c41e71eca54c970d36c5e5f4 to your computer and use it in GitHub Desktop.
Golang test task
// Задание 4
// Ассоциативные массивы широко применяются при решении алгоритмических задач. Когда количество данных более нескольких десятков, поиск значения в map происходит эффективнее, чем в массиве.
// Опираясь на эту информацию, попробуйте решить следующую задачу, которую часто предлагают на собеседованиях.
// Дан массив целых чисел A и целое число k. Нужно найти и вывести индексы пары чисел, сумма которых равна k. Если таких чисел нет, то вернуть пустой слайс. Индексы можно вернуть в любом порядке.
func find(arr []int, k int) []int {
// Создадим пустую map
m := make(map[int]int)
// будем складывать в неё индексы массива, а в качестве ключей использовать само значение
for i, a := range arr {
if j, ok := m[k-a]; ok { // если значение k-a уже есть в массиве, значит, arr[j] + arr[i] = k и мы нашли, то что нужно
return []int{i,j}
}
// если искомого значения нет, то добавляем текущий индекс и значение в map
m[a] = i
}
// не нашли пары подходящих чисел
return nil
}
// как можно заметить, алгоритм пройдётся по массиву всего один раз
// если бы мы искали подходящее значение каждый раз через перебор массива, то пришлось бы сделать гораздо больше вычислений
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment