Преобразование массивов и работа с сериями - C#
Формулировка задачи:
Полистал форум нет рабочего кода на задачу
Дан целочисленный массив размера N. Преобразовать массив, увеличив все его серии наибольшей длины на один элемент. Серия - это группа подряд идущих одинаковых элементов, длина серии — количество этих элементов (длина серии может быть равна 1).
Решил разобраться сам, но далее чем сделать счетчик разных сессий не смог.
Помогите, пожалуйста.
Решение задачи: «Преобразование массивов и работа с сериями»
textual
Листинг программы
using System;
class Program
{
static void ObserveSeries(int[] array, out int maxSeriesLength, out int maxSeriesCount)
{
maxSeriesLength = 1;
maxSeriesCount = 0;
int currentSeriesLength = 1;
for (int i = 1; i < array.Length; ++i)
{
if (array[i] == array[i - 1])
{
++currentSeriesLength;
}
else
{
UpdateMaxSeriesInfo(ref maxSeriesLength, ref maxSeriesCount, currentSeriesLength);
currentSeriesLength = 1;
}
}
UpdateMaxSeriesInfo(ref maxSeriesLength, ref maxSeriesCount, currentSeriesLength);
}
private static void UpdateMaxSeriesInfo(ref int maxSeriesLength, ref int maxSeriesCount, int currentSeriesLength)
{
if (currentSeriesLength > maxSeriesLength)
{
maxSeriesCount = 1;
maxSeriesLength = currentSeriesLength;
}
else if (currentSeriesLength == maxSeriesLength)
{
++maxSeriesCount;
}
}
static int[] IncreaseMaxSeries(int[] array, int maxSeriesLength, int maxSeriesCount)
{
int[] result = new int[array.Length + maxSeriesCount];
result[0] = array[0];
int index = 1;
int currentSeriesLength = 1;
for (int i = 1; i < array.Length; ++i)
{
if (currentSeriesLength == maxSeriesLength)
{
result[index++] = array[i - 1];
}
if (array[i] == array[i - 1])
{
++currentSeriesLength;
}
else
{
currentSeriesLength = 1;
}
result[index++] = array[i];
}
if (currentSeriesLength == maxSeriesLength)
{
result[index++] = array[array.Length - 1];
}
return result;
}
static void Main(string[] args)
{
int[] array = { 8, 9, 8, 8, 1, 1, 1, 7, 8, 4, 3, 3, 3, 2 };
int maxSeriesLength, maxSeriesCount;
ObserveSeries(array, out maxSeriesLength, out maxSeriesCount);
int[] result = IncreaseMaxSeries(array, maxSeriesLength, maxSeriesCount);
Console.WriteLine(string.Join(" ", array));
Console.WriteLine(string.Join(" ", result));
}
}