Другие языки программирования и технологии
Простая задачка для программистов: Как найти самый частый элемент массива?
Есть массив, о котором известно, что больше половины его элементов равны друг другу. Как за один проход по массиву выяснить чему же они равны? Дополнительные массивы создавать нельзя.
Да не реккурентный там алгоритм. O(n) сложность, процесс итеративный. Решали уже. Код на C#, стопудняк рабочий.
// Интерфейсный метод
public static T GetDominant<t>(T[] source)
{
T[] items = (T[]) source.Clone();
if (ProcessPairs(items, items.Length) == 0)
throw new Exception("No dominant");
return items[0];
}
// Рабочий метод
static int ProcessPairs<T>(T[] items, int count)
{
while (count > 1)
{
int newcount = 0;
for (int i = 0; i < count - 1; i += 2)
{
T left = items[ i ];
T right = items[i + 1];
if (left.Equals(right)) // same as left == right
{
items[newcount] = left;
newcount++;
}
}
if (count % 2 != 0 && newcount % 2 == 0)
{
items[newcount] = items[count - 1];
newcount++;
}
count = newcount;
}
return count;
}
Суть: если исключить половину повторяющихся элементов из массива, то самый частовстречающийся элемент по-прежнему будет всречаться чаще других. Выкладки из теории могу дать по просьбе в коментариях.
P.S. Ёманый парсер сожрал половину кода. На всякий, выслал на гель для душа.
// Интерфейсный метод
public static T GetDominant<t>(T[] source)
{
T[] items = (T[]) source.Clone();
if (ProcessPairs(items, items.Length) == 0)
throw new Exception("No dominant");
return items[0];
}
// Рабочий метод
static int ProcessPairs<T>(T[] items, int count)
{
while (count > 1)
{
int newcount = 0;
for (int i = 0; i < count - 1; i += 2)
{
T left = items[ i ];
T right = items[i + 1];
if (left.Equals(right)) // same as left == right
{
items[newcount] = left;
newcount++;
}
}
if (count % 2 != 0 && newcount % 2 == 0)
{
items[newcount] = items[count - 1];
newcount++;
}
count = newcount;
}
return count;
}
Суть: если исключить половину повторяющихся элементов из массива, то самый частовстречающийся элемент по-прежнему будет всречаться чаще других. Выкладки из теории могу дать по просьбе в коментариях.
P.S. Ёманый парсер сожрал половину кода. На всякий, выслал на гель для душа.
int massive[20] ={1,3,4,43,8,9,...};
int solv (int value,int pos) {
int val=massive[pos];
static int count = solv(massive[++pos],++pos);
return (massive[++pos]==value) ? 1<< 8 | 16 << val : 0 << 8 | 16 << val;
}
void main() {
int _result = solv(0,0);
int value = _result & 8 + 0x0F; // значение которого больше всего в массиве
int count = _result & 16; // количество.
}
Рекурентный алгоритм ...не уверен что работает
int solv (int value,int pos) {
int val=massive[pos];
static int count = solv(massive[++pos],++pos);
return (massive[++pos]==value) ? 1<< 8 | 16 << val : 0 << 8 | 16 << val;
}
void main() {
int _result = solv(0,0);
int value = _result & 8 + 0x0F; // значение которого больше всего в массиве
int count = _result & 16; // количество.
}
Рекурентный алгоритм ...не уверен что работает
фором пробегись и сравни ифом ф [i,j]=h[i,j] и делай действие типо я: =я+1; потом размерность массива разделиш на я
и получишь сумму равных элементов ну еше надо округлить раундом
и получишь сумму равных элементов ну еше надо округлить раундом
Похожие вопросы
- задачка PAscal. найти сумму положительных элементов массива, расположенных до минимального элемента этого массива
- Найти самые частые 4 числа в массиве
- Помогите с массивами! Найти и вывести на экран сумму нечётных элементов массива и количество отрицательных.
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- Объясните пожалуйста, что означает эта строка WRITE('ВВЕДИTE ЭЛЕМЕНТ МАССИВА '); READLN(MAS[1])?
- Плиз помогите!!! В массиве А размерностью nxm Найти сумму и количество всех элементов массива.
- Как найти максимум среди четных элементов массива? С++
- В одномерном массиве, состоящем из n вещественных элементов, вычис- лить: 39 1) сумму положительных элементов массив
- ПОМОГИТЕ, ДОБРЫЕ ЛЮДИ!!! Язык С++, записать в массив d нечетные элементы массива А которых нет в В - НЕ ПОЛУЧАЕТСЯ
- Работа с массивами. Объявление массивов. Изменение и чтение элементов массива