Тема: count_if чи звичайний цикл?
Треба знайти максимальну кількість чисел із наданих кандидатів, bitwise AND яких не дорівнює нулю.
Це сьогоднішнє завдання з Leetcode.
Ось два рішення:
Перше зі звичайним циклом.
int largestCombination(const vector<int> &candidates) {
if (candidates.size() == 1) return 1;
int answer { 0 };
for (int i = 0; i < 24; ++i) {
int count {0};
for (const auto& item: candidates){
if (item & (1 << i)){
++count;
}
}
answer = max(answer, count);
}
return answer;
}
Друге з count_if.
int largestCombination(const vector<int> &candidates) {
if (candidates.size() == 1) return 1;
int answer { 0 };
for (int i = 0; i < 24; ++i) {
auto same_bit = [i](auto number) { return number & (1 << i); };
int count = count_if(candidates.begin(), candidates.end(), same_bit);
answer = max(answer, count);
}
return answer;
}
Що з цього краще?
При перевірці синтаксису мені порадили використати count_if,
але я не помітив значної різниці в швидкості виконання програми.