Найти удаленное число

и задачки для интервью.
wanderer
Новичок
Сообщения: 88
Зарегистрирован: Вс сен 05, 1999 4:01 am
Откуда: CA, USA

Найти удаленное число

Сообщение wanderer »

Дан массив X[N] несортированных целых чисел. Второй массив Y[N-1] получен удалением из X одного числа. Определить удаленное число (но не обязательно его положение в массиве X) наибыстрым образом.

Подсказка - как это можно было бы ЗАПРОГРАММИРОВАТЬ?

[ 27-12-2001: Message edited by: wanderer ]</p>
Andy77
Уже с Приветом
Сообщения: 577
Зарегистрирован: Чт окт 19, 2000 4:01 am
Откуда: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA
Контактная информация:

Найти удаленное число

Сообщение Andy77 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">:</font><hr>Originally posted by wanderer:
<strong>Дан массив X[N] несортированных целых чисел. Второй массив Y[N-1] получен удалением из X одного числа. Определить удаленное число (но не обязательно его положение в массиве X) наибыстрым образом.

[ 27-12-2001: Message edited by: wanderer ]</strong><hr></blockquote>
методом деления пополам? [img:bd4ba1b278]images/smiles/icon_confused.gif[/img:bd4ba1b278]
Andy77
Уже с Приветом
Сообщения: 577
Зарегистрирован: Чт окт 19, 2000 4:01 am
Откуда: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA
Контактная информация:

Найти удаленное число

Сообщение Andy77 »

а если массив Y после удаления элемента еще и перемешали, то получается линейная сложность, если допустить, что мы можем использовать кусок памяти размером MAX(X) [img:3d70f54aed]images/smiles/icon_wink.gif[/img:3d70f54aed]
Аватара пользователя
Kisena
Уже с Приветом
Сообщения: 1615
Зарегистрирован: Чт июл 12, 2001 4:01 am
Откуда: Raleigh, NC

Найти удаленное число

Сообщение Kisena »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong><blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">:</font><hr>Originally posted by wanderer:
[qb]Дан массив X[N] несортированных целых чисел. Второй массив Y[N-1] получен удалением из X одного числа. Определить удаленное число (но не обязательно его положение в массиве X) наибыстрым образом.

[ 27-12-2001: Message edited by: wanderer ]</strong><hr></blockquote>
методом деления пополам? [img:fbe19d8891]images/smiles/icon_confused.gif[/img:fbe19d8891] [/QB]<hr></blockquote>

Если в массиве одно и то же число может появляться несколько раз, то не очень понятно, как реализовывать метод деления пополам.
Andy77
Уже с Приветом
Сообщения: 577
Зарегистрирован: Чт окт 19, 2000 4:01 am
Откуда: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA
Контактная информация:

Найти удаленное число

Сообщение Andy77 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Kisena:
<strong>

Если в массиве одно и то же число может появляться несколько раз, то не очень понятно, как реализовывать метод деления пополам.</strong><hr></blockquote>

точно так же как и в случае с уникальными числами... делим отрезок пополам, пока не наткнемся на
[b:8930d7f0db]n : X[n]!=Y[n]&& X[n-1]==Y[n-1][/b:8930d7f0db]

[ 27-12-2001: Message edited by: Andy77 ]</p>
Drom
Уже с Приветом
Сообщения: 242
Зарегистрирован: Пн янв 03, 2000 4:01 am
Откуда: TX > MA/NH > NJ/NYC
Контактная информация:

Найти удаленное число

Сообщение Drom »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>а если массив Y после удаления элемента еще и перемешали, то получается линейная сложность, если допустить, что мы можем использовать кусок памяти размером MAX(X) [img:2f0bbdded9]images/smiles/icon_wink.gif[/img:2f0bbdded9] </strong><hr></blockquote>

наверное, это и имелось в виду. в остальных случаях проще найти число _вместе_ с его индексом.

wanderer?
wanderer
Новичок
Сообщения: 88
Зарегистрирован: Вс сен 05, 1999 4:01 am
Откуда: CA, USA

Найти удаленное число

Сообщение wanderer »

Поскольку не сказано что числа все разные, то ... хмм ... они могут быть одинаковы. Поэтому, вопрос о положении удаленного элемента в общем случае неразрешим. Ну разве что попросить положение КАКОГО НИБУДЬ элемента с тем же значением. Но и этого не спрашивается. Все что спрашивается, это какое ЧИСЛО было удалено, где бы оно не находилось.

Также, элементы второго массива не обязанны быть расположенными в том же порядке. Извиняюсь если из условия это было не очень ясно.

[ 27-12-2001: Message edited by: wanderer ]</p>
Andy77
Уже с Приветом
Сообщения: 577
Зарегистрирован: Чт окт 19, 2000 4:01 am
Откуда: Kiev, Ukraine -> Boston, MA -> Minneapolis, MN -> Exton, PA
Контактная информация:

Найти удаленное число

Сообщение Andy77 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by wanderer:
<strong>Поскольку не сказано что числа все разные, то ... хмм ... они могут быть одинаковы. Поэтому, вопрос о положении удаленного элемента в общем случае неразрешим. Ну разве что попросить положение КАКОГО НИБУДЬ элемента с тем же значением. Но и этого не спрашивается. Все что спрашивается, это какое ЧИСЛО было удалено, где бы оно не находилось.

Также, элементы второго массива не обязанны быть расположенными в том же порядке. Извиняюсь если из условия это было не очень ясно.

[ 27-12-2001: Message edited by: wanderer ]</strong><hr></blockquote>

Тогда считаем суммы первого и второго массива - сойдёт?
Аватара пользователя
Chapaev
Новичок
Сообщения: 96
Зарегистрирован: Вт июн 19, 2001 4:01 am
Откуда: Canada

Найти удаленное число

Сообщение Chapaev »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by wanderer:
<strong>Дан массив X[N] несортированных целых чисел. Второй массив Y[N-1] получен удалением из X одного числа. Определить удаленное число (но не обязательно его положение в массиве X) наибыстрым образом.

Подсказка - как это можно было бы ЗАПРОГРАММИРОВАТЬ?</strong><hr></blockquote>

Я бы отсортировал оба массива X и Y функцией qsort. А затем
for(int i=0; i<N-1; i++)
if(X[i] != Y[i])
return X[i];
return X[N-1];
Аватара пользователя
Chapaev
Новичок
Сообщения: 96
Зарегистрирован: Вт июн 19, 2001 4:01 am
Откуда: Canada

Найти удаленное число

Сообщение Chapaev »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>

Тогда считаем суммы первого и второго массива - сойдёт?</strong><hr></blockquote>

Просто и красиво!
Drom
Уже с Приветом
Сообщения: 242
Зарегистрирован: Пн янв 03, 2000 4:01 am
Откуда: TX > MA/NH > NJ/NYC
Контактная информация:

Найти удаленное число

Сообщение Drom »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Chapaev:
<strong>
Я бы отсортировал оба массива X и Y функцией qsort. А затем...</strong><hr></blockquote>

сложность у quicksort'а (что нас в этой задаче и заботит) N * log(N) - больше чем линейная.
wanderer
Новичок
Сообщения: 88
Зарегистрирован: Вс сен 05, 1999 4:01 am
Откуда: CA, USA

Найти удаленное число

Сообщение wanderer »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by Andy77:
<strong>

Тогда считаем суммы первого и второго массива - сойдёт?</strong><hr></blockquote>

Для математика сойдет вполне [img:430f246ab8]images/smiles/icon_smile.gif[/img:430f246ab8] И действительно, просто и красиво.

Теперь для программистов: предположим, что мы используем такой тип целых чисел, что любая операция сложения или вычитания может вызвать переполнение [img:430f246ab8]images/smiles/icon_sad.gif[/img:430f246ab8]

Тогда как ?
Аватара пользователя
Kisena
Уже с Приветом
Сообщения: 1615
Зарегистрирован: Чт июл 12, 2001 4:01 am
Откуда: Raleigh, NC

Найти удаленное число

Сообщение Kisena »

А сравнивать можно? Насколько мы помним, сравнение двух чисел производится путем сравнения их разницы с нулем. Или теперь так не делают? Или никогда так не делали?
Drom
Уже с Приветом
Сообщения: 242
Зарегистрирован: Пн янв 03, 2000 4:01 am
Откуда: TX > MA/NH > NJ/NYC
Контактная информация:

Найти удаленное число

Сообщение Drom »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by wanderer:
<strong>Теперь для программистов: предположим, что мы используем такой тип целых чисел, что любая операция сложения или вычитания может вызвать переполнение [img:45b8d2a598]images/smiles/icon_sad.gif[/img:45b8d2a598]

Тогда как ?</strong><hr></blockquote>

недобрый Вы, Wanderer [img:45b8d2a598]images/smiles/icon_sad.gif[/img:45b8d2a598] [img:45b8d2a598]images/smiles/icon_mad.gif[/img:45b8d2a598] [img:45b8d2a598]images/smiles/icon_wink.gif[/img:45b8d2a598]

XOR!

[ 27-12-2001: Message edited by: Drom ]</p>
Аватара пользователя
sttranik
Уже с Приветом
Сообщения: 753
Зарегистрирован: Пн сен 18, 2000 4:01 am
Откуда: Fremont, CA
Контактная информация:

Найти удаленное число

Сообщение sttranik »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by wanderer:
<strong>Для математика сойдет вполне [img:06aa4e0c2d]images/smiles/icon_smile.gif[/img:06aa4e0c2d] И действительно, просто и красиво.

Теперь для программистов: предположим, что мы используем такой тип целых чисел, что любая операция сложения или вычитания может вызвать переполнение [img:06aa4e0c2d]images/smiles/icon_sad.gif[/img:06aa4e0c2d]

Тогда как ?</strong><hr></blockquote>
сложение в поле ? то что по программистки называется wrap around ?

теперь давайте усложним задачу. скажем что во втором массиве меньше не на одно а на два числа. как найти эти два числа?

PS. Между прочим мне эту задачу задавали на интервью [img:06aa4e0c2d]images/smiles/icon_smile.gif[/img:06aa4e0c2d]
Ответить

Вернуться в «Головоломки»