лишний раз.
Есть задача, а звучит она так :
-"Напишите программу, которая получает бинарный массив и считывает максимальное количество встречающее в нём количество единиц.".
Так как решил вернуться к базе, решил всё это запихать в вектор, создал тестики и итерировался. Время в 4 секунды на решение обычного массива мне не по-душе.
Кто из вас сможет подсказать, как можно укоротить его оставив читабельность и укоротить количество написанного кода и в должной мере ускорить его?
int findMaxConsecutiveOnes(std::vector<int>& nums) {
int count{0}, max{0};
for(std::size_t i = 0; i <= nums.size(); ++i){
if(nums[i] != 0){
++count;
} else if(max <= count){
max = count;
count = 0;
}
}
return max;
}
максимальное подряд идущих я так понимаю? ну твой код segfault должен дать из-за i <= nums.size(). if(nums[i] != 0) - проверка бессмысленна. Ну и быстрее, чем за O(N) сделать все равно не получится. А так - ну цикл поменять for (int num : nums) { count += num; if (max <= count) { max = count; count = 0; } }
Можешь распараллелить его, но читабельность пострадает
Собери релиз
пардон, я насчет проверки Не равно нулю не прав был. но в плане цикла и границ - мне кажется прав )
а ты точно понял правильно, что такое "бинарный массив"?
Другими словами хотел облегчить себе написание "массив состоящий из 1 и 0"
Там в любом случае мы не выходим за границы массива и учтём то, что в конце может быть так же единица, которую он должен будет считать
аргументируй. при каких условиях ты не обратишься к nums[nums.size()] ?
Для этого <= должен быть заменён на <
Обсуждают сегодня