• Предмет: Информатика
  • Автор: londondisa615
  • Вопрос задан 5 лет назад


Дан размер массива и сам массив (вводится с клавиатуры)

Если в массиве одно и тоже число встречается несколько раз подряд, то первое его появление оставить, остальные заменить на 0
пример:
8 9 9 9 5 9 3 3 1
Станет
8 9 0 0 5 9 3 0 1

нужно на с++ код ​

Ответы

Ответ дал: STGLN
0

#include < iostream >

#include < vector >

using namespace std;

int main(){

   int n;

   cin >> n;

   vector<int> a(n);

   for(auto &i: a) cin >> i;

   int j = 0;

   while(j < n){

       int l = j, r = n - 1, x = j;

       while(l <= r){

           int m = (l + r) / 2;

           if(a[m] == a[j]){

               x = m;

               l = m + 1;

           }

           else{

               r = m - 1;

           }

       }

       while(++j <= x)

           a[j] = 0;

   }

   for(auto &i: a) cout << i << " ";

}

Решение за O(nlogn) я привел. Но можно сделать круче: за O(n) - о том как, подумай на досуге сам. Как домашка тебе

Вас заинтересует