powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как найти число
25 сообщений из 74, страница 1 из 3
Как найти число
    #36078327
alusov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите правильный алгоритм. Дан массив размера N из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза.
Как найти число за наименьшее время.
...
Рейтинг: 0 / 0
Как найти число
    #36078374
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отсортировать массив, тогда одинаковые числа будут идти подряд.
...
Рейтинг: 0 / 0
Как найти число
    #36078628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать битовую карту, если диапазон целых чисел невелик.
...
Рейтинг: 0 / 0
Как найти число
    #36078662
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, битовая карта слишком дорого, проще сортировка подсчетом
...
Рейтинг: 0 / 0
Как найти число
    #36078682
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blindedmayton, битовая карта слишком дорого, проще сортировка подсчетом
Обоснуй
...
Рейтинг: 0 / 0
Как найти число
    #36078711
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton пишет:

> mayton, битовая карта слишком дорого, проще сортировка подсчетом
>
>
> Обоснуй

Вы похоже совсем зарапортовались. Какая сортировка?
Сортировка -- это уже O( N log N ) А тут решается
за линейное время O( N ) всё. За один просмотр массива.

А я кстати этот вопрос знаю. И знаю, где его задают.
Posted via ActualForum NNTP Server 1.4

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Как найти число
    #36078724
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА я кстати этот вопрос знаю. И знаю, где его задают.Этот вопрос много где задают.
Известный баян, на sql.ru частенько встречался.
...
Рейтинг: 0 / 0
Как найти число
    #36078788
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗа один просмотр массива

Что, и для случая когда шаг между двумя последовательными числами в ОТСОРТИРОВАННОЙ последовательности от 1 до М является совершенно случайной величиной? Было б интересно взглянуть на такое решение. Не томи, покажь
...
Рейтинг: 0 / 0
Как найти число
    #36078855
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikhail_n,

А причем тут "шаг между двумя последовательными числами в ОТСОРТИРОВАННОЙ последовательности"?
Главное, чтобы памяти хватило на массив размера M бит, а шаг между числами, имхо, никакой роли не играет.
...
Рейтинг: 0 / 0
Как найти число
    #36078875
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

сказано уже было - массив целых чисел. Памяти на это надо для int32 чуть больше полугигабайта.
...
Рейтинг: 0 / 0
Как найти число
    #36078885
mikhail_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГлавное, чтобы памяти хватило на массив размера M бит, а шаг между числами, имхо, никакой роли не играет.

Ну, с использованием доп. памяти - ни вапрос. Но я так понял что Зив знает как получить результат не используя дополнительные массивы.
...
Рейтинг: 0 / 0
Как найти число
    #36079025
гдеже?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
А я кстати этот вопрос знаю. И знаю, где его задают.


И где, если не секрет?
...
Рейтинг: 0 / 0
Как найти число
    #36079216
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гдеже? пишет:

> И где, если не секрет?

Не скажу.

На счёт дополнительной памяти -- дело не в её наличии,
а в скорости поиска по этой дополнительной структуре.
Если её делать линейной, то результат работы всего
алгоритма будет O(N**2). Если логарифмической, то
будет O( N*log N ). А в идеале можно сделать за O( N ).
Вот как -- и думайте. посмотрим, какие вы джедаи
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как найти число
    #36079342
гдеже?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
#pragma warning (disable: 4786 )
#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;

int main(){

	int n;
	cin >> n;
	vector<int> arr;

	int temp;
	for ( int i =  0 ; i < n; i++ ){
		cin >> temp;
		arr.push_back(temp);
	}

	vector<int>::iterator iter;
	
/*	for ( iter = arr.begin(); iter != arr.end(); ++iter )
		cout << *iter << " ";
	cout << endl;
*/
	vector<int>::const_iterator iterScnd;
	bool found = false;
	for ( iter = arr.begin(); iter != arr.end(); ++iter ){
		for ( iterScnd = iter +  1 ; iterScnd != arr.end(); ++iterScnd )
			if ( *iterScnd == *iter ){
				cout << *iter << endl;
				found = true;
				break;
			}
		if ( found )
			break;
	}
	

	return  0 ;
}


Чисто хз, на скорую руку, в анализе не силен(
...
Рейтинг: 0 / 0
Как найти число
    #36079354
Экзамен в школу падаванов? Забавно =)
...
Рейтинг: 0 / 0
Как найти число
    #36079360
vino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alusovПодскажите правильный алгоритм. Дан массив размера N из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза.
Как найти число за наименьшее время.
Вспоминается похожая прикольная задачка, где "Дан массив размера M+1 из целых чисел, принимающих значения от 1 до M, при этом одно число в этом массиве повторяется два раза..."
...
Рейтинг: 0 / 0
Как найти число
    #36079366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока еще садик.
...
Рейтинг: 0 / 0
Как найти число
    #36079450
гдеже?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
через set в STL?
...
Рейтинг: 0 / 0
Как найти число
    #36079469
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гдеже? пишет:

> bool found = false;
> for ( iter = arr.begin(); iter != arr.end(); ++iter ){
> for ( iterScnd = iter + *1*; iterScnd != arr.end(); ++iterScnd )
> if ( *iterScnd == *iter ){
> cout << *iter << endl;
> found = true;
> break;

> Чисто хз, на скорую руку, в анализе не силен(

Это -- O( N**2 ), это не интересно, а интересно O( N ).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как найти число
    #36079613
Случайно к вам попал =)
Но прям даже интересно стало. А как оцените такой код? Это джава, пугаться не надо.

final int ELEMENTS_COUNT = 100000;
int doubleValue = -1;
int[] array = new int[ELEMENTS_COUNT];
Set set = new HashSet<Integer>();
for(int i = 0; i<ELEMENTS_COUNT-1; i++){
array[i] = i;
}
array[ELEMENTS_COUNT-1] = 1;
int size = set.size();
long startTime = System.currentTimeMillis();

// Все интересное тут:

for(int i = 0; i<100000; i++){
set.add(array[i]);
int s;
if((s = set.size()) == size){
doubleValue = array[i];
break;
}else{
size = s;
}
}



long endTime = System.currentTimeMillis();
System.out.println("Works: " + (endTime - startTime) + ", value: " + doubleValue);
...
Рейтинг: 0 / 0
Как найти число
    #36079623
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНа счёт дополнительной памяти -- дело не в её наличии,
а в скорости поиска по этой дополнительной структуре.
Если её делать линейной, то результат работы всего
алгоритма будет O(N**2). Если логарифмической, то
будет O( N*log N ). А в идеале можно сделать за O( N ).
Вот как -- и думайте. посмотрим, какие вы джедаи
а чего думать-то? mayton еще с самого начала сказал про битовую карту, про что Вы сами сказали "решается за линейное время O( N )" (если я правильно понял цитирование).
...
Рейтинг: 0 / 0
Как найти число
    #36079647
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень юный падаванСлучайно к вам попал =)
Но прям даже интересно стало. А как оцените такой код? Это джава, пугаться не надо.

for(int i = 0; i<100000; i++){
set.add(array[i]);
Зависит от структуры хранения set и от внутренней реализации add. Перепишите этот момент алгоритмически, чтобы было понятно тем, кто джаву не знает.
...
Рейтинг: 0 / 0
Как найти число
    #36079680
Смысл множества - хранение объектов в единственном экземпляре, реализовано через хеш-функцию (в данном случае). Скорость выполнения операций добавления и получения размера фиксирована (какова она - зависит от вашей машины, сколько там операций - сказать не берусь, так глубоко не копал). Смысл в том, что бы проверить, увеличится ли размер множества, если добавить туда элемент массива. Если такой элемент был добавлен раньше - не увеличится.
...
Рейтинг: 0 / 0
Как найти число
    #36079693
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень юный падаванСкорость выполнения операций добавления ... фиксированаВы в этом уверены? ссылка на доку есть?
...
Рейтинг: 0 / 0
Как найти число
    #36079721
Уверен. Специально перечитал =)
This class offers constant time performance for the basic operations (add, remove, contains and size)
Если я правильно перевел с вражеского, конечно =)
...
Рейтинг: 0 / 0
25 сообщений из 74, страница 1 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как найти число
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]