Найти возрастающую последовательность в массиве

Есть у нас одномерный массив, если в нём имеется такая последовательность как 1 2 3 4 или 3 4 5 6 то есть последовательность где каждый следующий больше предыдущего на единицу то это дело надо переписать в результирующий массив как 1-4 или же 3-6(это всё для примера взял) и собственно оставшуюся часть массива тоже не забыть дописать то есть если есть массив 1,4,6,7,8,9,10,20,40 то в результате получим 1 4 6 10 20 40. Моя идея такова что нужно топать по массиву и смотреть не больше ли следующий элемент на единицу и если да, то начать отсчитывать до каких пор это условие выполняется и потом записать элементы под этими индексами в результирующий массив. Вот что я сам написал, но как-то оно всё коряво:

static void CompactArray(int[] arr)
   {
       int[] newArr = new int[arr.length];
       int l = 0;
       for (int i = 0,k=1; i <arr.length ; i+=k,k=1) {
           if(arr[i+1]==arr[i]+1)
           {
               int j = i;
               while (arr[j+1]==arr[j]+1)
               {
                   j++;
                   k++;
               }
               if (k>1)
               {
                    
               }
           }
       }
   }

Ответы (1 шт):

Автор решения: return
void RemoveSequences(ReadOnlySpan<int> input, Span<int> output, out int outputLength)
{
    outputLength = 0;

    for (var i = 0; i < input.Length - 1; i++)
    {
        output[outputLength++] = input[i];

        // это только для того, чтобы сделать декремент
        if (input[i + 1] == input[i] + 1)
        {
            do { i++; } // скипаем [пропускаем] последовательность
            while (input[i + 1] == input[i] + 1);

            i--; // если хотим не скипнуть последнее число в последовательности
        }
    }
    
    output[outputLength++] = input[^1]; // добавляем последний элемент
}
→ Ссылка