Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/88: Рейтинг темы: голосов - 88, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71

Расстояния до нуля

27.12.2019, 18:57. Показов 18553. Ответов 26

Задан массив a0,a1,…,an−1. Для каждого элемента найдите расстояние от него до ближайшего нуля. Гарантируется, что в массиве встречается ноль хотя бы один раз.

Входные данные
В первой строке входных данных содержится целое число n (1≤n≤2⋅105) — длина массива a. Вторая строка содержит элементы массива, записанные через пробел (−109≤ai≤109).

Выходные данные
Выведите последовательность d0,d1,…,dn−1. Значение di должно быть равно расстоянию от элемента в позиции i до ближайшего элемента, равного нулю.

Примеры
входные данные
9
2 1 0 3 0 0 3 2 4
выходные данные
2 1 0 1 0 0 1 2 3

входные данные
5
0 1 2 3 4
выходные данные
0 1 2 3 4

входные данные
7
5 6 0 1 -2 3 4
выходные данные
2 1 0 1 2 3 4
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.12.2019, 18:57
Ответы с готовыми решениями:

Расстояния до нуля
ограничение по времени на тест 2 секунды ограничение по памяти на тест 256 мегабайт Задан массив a0,a1,…,an−1. Для каждого элемента...

Реализовать вычисление расстояния до введенной пользователем точки, расстояния от начала координат
Подпрограмма «Точка в пространстве». Реализовать вычисление расстояния до введенной пользователем точки, расстояния от начала координат.

Нахождение кратчайшего расстояния и пройденного расстояния по траектории движения мыши
Здравствуйте, необходимо найти кратчайшее расстояние и пройденное расстояние по траектории между каждыми нажатиями левой кнопки мыши. ...

26
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
11.01.2020, 22:44
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
хоть один бы человек поинтересовался, каким алгоритмом решается задача и зачем вообще предварительно считать zeros
И зачем предварительно считать zeros, если это не нужно?
А алгоритм простой 2 прохода по массиву, O(n) по времени.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.01.2020, 07:41
Чтобы уменьшить число итераций?

Если можете предложить другой алгоритм проще, welcome!
0
0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 71
12.01.2020, 08:53  [ТС]
Python
1
2
3
4
5
6
7
zeros = []
for i in range(len(ls)):
    if ls[i] == 0:
        zeros.append(i)
zeros = [i for i, v in range (len(ls)) if v == 0]
 
print(*[min(abs(i - j) for j in zeros) for i in range (len (ls))])
В итоге так получается или нет?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
12.01.2020, 13:21
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Если можете предложить другой алгоритм проще, welcome!
Дано:
Code
1
A= 1 2 0 2 0 3 4 0 0 3 2 3 4 0 3 2
Ответом будет массив D:
Code
1
D= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Находим индекс левого НУЛЯ,
Code
1
2
A= 1 2 0 2 0 3 4 0 0 3 2 3 4 0 3 2
       ^
заполняем D начиная с него до конца (шаг +1) по следующему правилу:
если A[i] = 0, то D[i] = 0 иначе D[i] = D[i-1] + 1
Code
1
D = 0 0 0 1 0 1 2 0 0 1 2 3 4 0 1 2
Находим индекс правого НУЛЯ,
Code
1
2
A= 1 2 0 2 0 3 4 0 0 3 2 3 4 0 3 2
                             ^
заполняем D начиная с него до индекса левого НУЛЯ (шаг -1) по следующему правилу:
если A[i] = 0, то D[i] = 0 иначе D[i] = min(D[i], D[i+1] + 1)
Code
1
D= 0 0 0 1 0 1 1 0 0 1 2 2 1 0 1 2
заполняем D начиная с индекса левого НУЛЯ до начала (шаг -1) по следующему правилу:
если D[i] = D[i+1] + 1
Code
1
D= 2 1 0 1 0 1 1 0 0 1 2 2 1 0 1 2
Два прохода по массиву A, в итоге сложность O(n)
3
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
12.01.2020, 13:41
Вроде, проще, чем у меня. Я сохранял индексы нулей, а потом считал расстояния до всех. O(N*M), где M-количество нулей.
0
0 / 0 / 0
Регистрация: 01.08.2022
Сообщений: 1
01.08.2022, 23:04
eaa, Скажите пожалуйста, как называется этот алгоритм? Хочу изучить поподробнее
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
02.08.2022, 08:34
_rus, этот алгоритм называется мозг)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2022, 08:34

Составить программу определения расстояния от городов до вышки, если известны расстояния между городами
Три города нуждаются в мощных телевышках для улучшения качества телепередач. Специалисты рассчитали, что можно обойтись одной вышкой, если...

Вычисление числа элементов больше нуля и меньше нуля в двумерном массиве
Здравствуйте, при выполнении программы ругается на a внутри функций: "выражение должно иметь тип указателя на объект, но имеет тип...

Правило нуля, как копировать класс, который удовлетворяет правилу нуля?
Всем привет. Есть концепция правило нуля, которая гласит, что не стоит реализовывать специальные члены методы класса(то есть конструктор...

Сравнить два массива на чисела: больше нуля, меньше нуля и равно нулю
С помощью множества сравнить два массива на чисел: больше нуля, меньше нуля и равно нулю.

Вычислить среднее арифметическое элементов, расположенных до первого нуля и после последнего нуля
В одномерном массиве, состоящем из п элементов, вычислить: среднее значение элементов, расположенных в массиве между первым последним...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru