Преобразование массивов и работа с сериями - 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)); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д