2015-10-09 4 views
-6

Я хочу удалить последовательные повторяющиеся числа из массива, как если бы в этом массиве повторялась последовательность из двух или более экземпляров одного и того же целого числа, последовательно повторяемая (см. Пример ниже).Удаление последовательных чисел из массива int

int[] array = {3, 1, 1, 2, 1, 4, 4, 4}; 

после удаления последовательных повторных чисел

(like 1,1 and 4,4,4)=>{3,2,1} 

, таким образом, я хочу, чтобы переместить порядковые номера, чтобы положить конец и хочу использовать Array.Resize() функцию, чтобы изменить размер массива. Мне не нужен полный код, подход будет прекрасным.

static void RemoveRepeated(ref int[] array) 
    { 
     int count = 0; bool flag; 
     for (int i = 0; i < array.Length; i++) 
     { 
      flag = true; 
      for (int j = i+1; j < array.Length-1; j++) 
      { 
       if (array[i] == array[j]) 
       { 

         int temp = array[j]; 
         array[j] = array[j + 1]; 
         array[j + 1] = temp; 
         if (flag) 
         { 
          count++; 
          flag = false; 
         } 
       } 
      } 
     } 
     Array.Resize(ref array,array.Length-count); 
    } 
+0

Вы имеете в виду, что вам нужны только уникальные номера? Вы, например, так говорите! Для этого в C# вы можете выполнить 'array.Distinct();' –

+2

Разрешено ли вам использовать коллекции? –

+0

Нам не нужен весь ваш код, соответствующие порции будут в порядке. – csmckelvey

ответ

0

Вы можете поместить их в стек по одному, если только следующий элемент в массиве не равен последнему элементу в стеке.

+0

@Firat Bakioglu Мне нужно изменить в самом массиве и использовать Array.Resize, который является основным req. –

+4

@PraveenDeewan, вам нужно сделать свою работу, пытаясь заставить кого-то сделать работу за вас. Еще лучше. Пойдите к своему инструктору и скажите им, что вы не понимаете этого требования .. почему вы отказываетесь показывать нам что вы пробовали .. – MethodMan

+0

@MethodMan я очистился о req, возможно, вы не можете меня понять. Я хочу, чтобы подход не был кодом. –

1

Вот как вы можете это сделать эффективно. Я думаю, что код сам объясняет.

static void RemoveRepeated(ref int[] array) 
{ 
    int count = 0; 
    for (int i = 0; i < array.Length;) 
    { 
     var current = array[i]; 
     int repeatCount = 1; 
     while (++i < array.Length && array[i] == current) 
      repeatCount++; 
     if (repeatCount == 1) 
      array[count++] = current; 
    } 
    Array.Resize(ref array, count); 
} 
+0

, спасибо, что он сработал. Этот код мы можем использовать для удаления дубликатов по всему массиву с некоторой модификацией. –

Смежные вопросы