avva: (Default)
[personal profile] avva
Задачка для программистов и интересующихся. Наверняка известная, но мне в такой форме не встречалась, и понравилась.

Дан массив размером N, в нем есть только числа от 1 до N-1 (необязательно все, необязательно по порядку). Очевидно, какие-то из них повторяются. Найти какое-то число, которое встречается в массиве больше одного раза.

Суть в том, чтобы сделать это с как можно лучшей сложностью времени и места. Скажем, тривиально сделать это за O(N) времени с O(N) места. Можно лучше. Исходный массив не бесплатный: его можно менять, но это считается в бюджет места.

Update: все скрытые комментарии с правильными решениями раскрываются. Не заглядывайте в комментарии, если хотите дальше думать сами - там есть много правильных решений. Оптимальное решение этой проблемы выполняет задачу за O(N) времени, O(1) места.

Date: 2011-01-05 06:56 pm (UTC)
From: [identity profile] oulenspiegel.livejournal.com
Да, что-то я невнимательный сегодня.
В общем, сходу ясно, как используя по 1 биту на число. Но, наверное, можно как-то еще лучше...

Date: 2011-01-05 07:17 pm (UTC)
From: [identity profile] meshko.livejournal.com
1 бит на число это все равно O(n)

Date: 2011-01-05 07:18 pm (UTC)

January 2026

S M T W T F S
    1 2 3
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 5th, 2026 10:09 am
Powered by Dreamwidth Studios