Size: a a a

2021 July 14

IZ

Ilia Zviagin in supapro.cxx
Тогда смотри на руки, выпрямляй  по линейке
источник

Ps

ProIt same in supapro.cxx
Всем привет, подскажите немного, вот я посмотрел реализацию std::count
template<class InputIt, class T>
typename iterator_traits<InputIt>::difference_type
   count(InputIt first, InputIt last, const T& value)
{
   typename iterator_traits<InputIt>::difference_type ret = 0;
   for (; first != last; ++first) {
       if (*first == value) {
           ret++;
       }
   }
   return ret;
}
а можно как нибудь заставить проходить массив  только если 'ret' не превышает некоторого значения?
источник

DP

Denis Paukaev in supapro.cxx
if(ret++ >= 42) { return ret; } ?
источник

С

Сергей in supapro.cxx
тогда это не count
источник

Ps

ProIt same in supapro.cxx
ну вот именно если использовать стандартную либу
источник

Ps

ProIt same in supapro.cxx
а что тогда?
источник

С

Сергей in supapro.cxx
выдуманный тобой алгоритм.
источник

Ps

ProIt same in supapro.cxx
а нет такого способа чтоб получить значения внутренней переменной? и заюзать std::count_if?
источник

DP

Denis Paukaev in supapro.cxx
нет
источник

С

Сергей in supapro.cxx
ты скажи чего хочется ))
источник

Ps

ProIt same in supapro.cxx
ну вот хочется чтоб не писать своё, а использовать готовое)
источник

С

Сергей in supapro.cxx
так что свое и что готовое?
Что ты посчитать хочешь? что к-во каких-то элементов в векторе больше заданного? - чем тогда count не угодил? все равно в худшем случае нужно весь массив просматривать.
источник

Ps

ProIt same in supapro.cxx
ну вот если количество уже превысило допустимые лимиты, то чтоб прервалась задача
источник

Ps

ProIt same in supapro.cxx
прохождения всего массива
источник

Ps

ProIt same in supapro.cxx
Given an array a that contains only numbers in the range from 1 to a.length, find the first duplicate number for which the second occurrence has the minimal index. In other words, if there are more than 1 duplicated numbers, return the number for which the second occurrence has a smaller index than the second occurrence of the other number does. If there are no such elements, return -1.
Example
For a = [2, 1, 3, 5, 3, 2], the output should be firstDuplicate(a) = 3.

There are 2 duplicates: numbers 2 and 3. The second occurrence of 3 has a smaller index than the second occurrence of 2 does, so the answer is 3.

For a = [2, 2], the output should be firstDuplicate(a) = 2;

For a = [2, 4, 3, 5, 1], the output should be firstDuplicate(a) = -1.
Оригинал задачи вот
источник

С

Сергей in supapro.cxx
ну можно упороться и написать что-ниюудь с трехэтаэной лямбдой используя например accumulate или partial_sum я думаю. Но простейший цикл с мапой - проще и нагляднее.
источник

DP

Denis Paukaev in supapro.cxx
можно через find_if
источник

DP

Denis Paukaev in supapro.cxx
что нибудь такое

    constexpr char kSym{'a'};
   int n{};

   std::find_if(std::cbegin(v), std::cend(v), [kSym, &n](char c) {
       if(kSym == c) {
           ++n;
       }

       if(n >= 3) {
           return true;
       }

       return false;
   });
источник

Ps

ProIt same in supapro.cxx
вот думал, как это можно бы было решить используя стандартную либу,
int firstDuplicate(std::vector<int> a) {
   std::vector<int> res;
   res.reserve(a.size());
   for (auto x : a) {
       if (std::count_if(res.begin(), res.end(), 0) < 1)
           res.push_back(x);
       else return x;
   }
   return -1;
}
вот такое решение выдаёт ошибку прохода теста, по превышении лимита времени
источник

С

Сергей in supapro.cxx
и правильно выдает. Оно квадратичное. использую unordered_set OR map это за линию делается.
источник