拿硬币
问题:
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。
思路:
遍历数组中每一个元素,如果是偶数就每次拿两枚,结果为 n / 2.如果是奇数拿的次数就相当于前面每次拿两枚,最后一次拿一枚,结果为 (n + 1) / 2。
class Solution {
public:
int minCount(const vector<int>& coins) {
int count = 0;
for(auto& i : coins){
if(i % 2 == 0) count += i / 2;
else count += (i + 1) / 2;
}
return count;
}
};