Поиск наибольшего подмассива дупликатов в массиве дупликатов

Рейтинг: 0Ответов: 1Опубликовано: 21.08.2023

Код не самый лучший, пока только учусь.

static void DuplicateArr(ref int[] arr)
{
Array.Sort(arr);
int[] clearArr =  new int[arr.Length];
    for (int i = 0; i < clearArr.Length; i++)
    {
        clearArr[i] = -969696;
    }   
    for (int i = 0; i < arr.Length; i++)
    {
        for (int j = i+1; j < arr.Length; j++)
        {
            if (arr[i] == arr[j])
            {
                if (arr[i] == arr[j-1] && arr[i] == arr[j])
                {
                    clearArr[i] = arr[j];
                    clearArr[i + 1] = arr[j];
                }
                else
                    clearArr[i] = arr[j];
            }

        }
    }
arr = clearArr;
}
static int[] Cleaner(ref int[] arr)
{
    DuplicateArr(ref arr);
    Array.Sort(arr);    
    return arr;
}


int[] mass = { 3,3,2,4,4,6,7,-3,4,4,12,48,8,8,8,8,48,8,8,3};
Cleaner(ref mass);
foreach (var z in mass)
{
    Console.Write(z + " ");
}

Сначала метод DuplicateArr записывает все элементы, которые повторяются в новый массив, но возникает проблема с нулём, так как указать изначально длинну clearArr я не могу, поэтому записываю в массив число -969696. Вот такой костыль. В общем уже в методе cleaner Я сортирую полученный массив и мне нужно достать из него самый большой подмассив дупликатов, не считая -969696.

{-969696, -969696, -969696, -969696, -969696, 3, 3, 3, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 48, 48}

Понять как реализовать это, найти начальный и конечный индекс подмассива мне не хватает ума

Ответы

▲ 0

Нахождение начального элемента массива, не считая -969696:

int first = 0;
for (int i = 0; i < arr.Length; i++){
    if (arr[i] == -969696) {
        continue;
    } else {
        first = i;
        break;
    }
}

Нахождение последнего элемента:

int last = arr.Length-1;

Получение массива:

int[] newArr = new int[last-first+1];
for (int i = fist; i <= last; i++){
    newArr[i] = arr[i]
}