| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Помогите разобраться с задачей (массивы) |
| Автор: floopless 24.11.2009, 11:54 |
| Дано два массива. Найти наименьшее среди тех элементов первого массива, которые не входят во второй массив. Я мыслю как - взять первый массив, отсортировать по возрастанию, дальше взять из него первый (наименьший элемент) и сравнивать со всеми элементами второго массива. Если элементы окажутся равны - брать следующий и снова сравнивать. В противном случае - вывести первый элемент. Стопорюсь на сравнении - подскажите как правильно сделать.. Или есть такой вариант решения - тоже пришел в голову - сравнить оба массива на предмет одинаковых элементов, находя - удалять такой элемент из первого массива. Дальше отсортировать полученный массив по возрастанию и вывести первый (наименьший элемент). Но тут проблемма - удаление элемента из массива.. Подскажите вообщем.. и вообще, какой способ лучше, оптимальнее..? |
| Автор: Уттара 24.11.2009, 13:34 |
| Сравниваешь два массива если элемент из первого массива не найден во втором массиве то записать его в третий массив, потом третий массив сортируешь и самое первое число смотришь. |
| Автор: Демо 24.11.2009, 13:43 |
| Простейший и железный алгоритм: A,B - массивы C - пустой массив Пробегаем в цикле по A, каждый элемент ищем в B. Если находим A[n], отсутствующий в B элемент, добавляем этот элемент A[n] в C. Пробегаем один раз C и находим минимальный элемент. |
| Автор: Frees 24.11.2009, 13:50 |
| A,B - массивы перебегаем массив А для каждого элемента - ищем в В если не наши сравниваем элимент с мин. если меньше то это новый мин Добавлено через 1 минуту и 1 секунду или перебегаем массив А для каждого элемента - если он меньше мин то ищем его в В если не наши то это новый мин |
| Автор: floopless 24.11.2009, 15:10 |
| А как быть с третьим массивом? Сколько выделить под него места? Естли ведь выделить больше, остальные элементы будут нули..и как тогда определить минимальный.. |
| Автор: Уттара 24.11.2009, 15:33 |
Функцией SetLength в цикле изменяешь размеры А класс TList тут не поможет?, хотя придется преобразовывать числа в указатели. |
| Автор: floopless 24.11.2009, 15:48 |
| У меня массивы указателей.. напиши как использовать TList.. |
| Автор: Frees 24.11.2009, 15:51 | ||
Добавлено через 3 минуты и 26 секунд и не забыть free когда список станет не нужен |
| Автор: floopless 25.11.2009, 00:22 | ||
| Вообщем вот что получилось - (Дано два массива. Найти наименьшее среди тех элементов первого массива, которые не входят во второй массив) Вроде все работает..но посмотрите на код плз..не нагородил ли я там глупых конструкций..
|
| Автор: Демо 25.11.2009, 00:59 |
| Я бы, честно говоря, вынес отдельные участки кода в доп. функции. |
| Автор: Демо 25.11.2009, 01:28 | ||
Раз уж ты всё сделал, вот посмотри на короткий вариант:
|
| Автор: Frees 25.11.2009, 07:29 | ||
Демо,
так ведь оптимальнее |
| Автор: Демо 25.11.2009, 08:03 |
Может быть;) |
| Автор: amsoft 25.11.2009, 10:20 | ||
|
| Автор: Frees 25.11.2009, 10:24 |
почему не глядя я просто условия местами поменял.. если элемент больше минимума то можно и не смотреть есть ли он во втором массиве |
| Автор: amsoft 25.11.2009, 14:11 |
| Frees, это я затупил - первую строку не увидел (потом сообщение отредактировал |
| Автор: Dom 25.11.2009, 17:01 |
| А мне вот нравится первоначальная идея автора топика. Сортировать оба массива. Потом брать пошагово элементы первого массива, начиная с наименьшего, и бинарным поиском искать во втором массиве. Если элемент найден, то берем следующий элемент первого массива и ищем его во втором. Не силен в оценке сложности алгоритмов, но мне кажется, что такой алгоритм будет быстрее. Или я не прав? |