Преобразование массивов и работа с сериями - 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));
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы