Статья Автор: Лебедев Дмитрий

TUZ_2-20 Поиск трех чисел

TUZ_2-20  Поиск трех чисел

TUZ_2-20  Поиск трех чисел
2.20  Поиск трех чисел
Дан отсортированный список положительных целых чисел, в котором нужно отыскать три числа, сумма которых равна заданному.
Ваша задача: написать функцию, которая принимает отсортированный список положительных целых чисел и возвращает True,
если в списке есть три числа, сумма которых равна заданному числу target, в противном случае она должна возвращать False.
В табл. 2.20 показаны ожидаемые результаты для некоторых входных данных.
Таблица 2.20. Некоторые ожидаемые результаты для задачи поиска трех чисел
ListNumbers, target Ожидаемый результат
3, 5, 6, 8, 9, 21
14
True
2, 4, 8, 16, 32
16
False 
550, 600, 2000, 3000, 4000
900
False 
1, 2, 16, 79, 80, 340
83
True

Алгоритм
.В решении используются три вложенных цикла for для обхода всех чисел и сравнения их сумм с целевым числом target.
Однако это простое решение имеет высокую временную сложность. Для достижения поставленной задачи алгоритм использует следующие шаги.
1. Принимается отсортированный список чисел и целевое число target.
2. Длина списка сравнивается с числом 3. Если она меньше, то возвращается False. . Выполняется обход элементов списка.
4. Для каждого числа в списке вычисляется новое целевое число, вычитанием текущего числа из целевого.
5. На следующем этапе используется алгоритм поиска двух чисел. Алгоритм поиска двух чисел принимает список чисел и целевое число и возвращает True, если в списке есть два числа, сумма которых рав- на целевому числу. В противном случае возвращается False.
6. Алгоритм поиска двух чисел выполняет следующие шаги:
а) длина списка сравнивается с числом 3. Если она меньше, то воз- вращается False;
б) инициализируются два указателя: один указывает на начало списка, а другой – на его конец;
в) пока начальный указатель меньше конечного указателя:
1) вычисляется сумма двух чисел в позициях начального и конечного указателей;
2) если сумма равна целевому числу, вернуть True;
3) если сумма меньше целевого числа, увеличивается начальный указатель, чтобы перейти к большему числу;
4) если сумма больше целевого числа, уменьшается конечный указатель, чтобы перейти к меньшему числу;
д) если совпадение не найдено, возвращается False.
7. Если такая пара существует, возвращается True.
8. Если в списке не найдено совпадений, возвращается False.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать