2 - 推公式贪心
贪心问题之推公式问题。
练习题
2244. 完成所有任务需要的最少轮数 - 力扣(LeetCode)
问题可以转换为:每轮可以把c
减少2或3,问把c
减少到0最少要几轮?例如c = 10
时,10 = 3 + 3 + 2 + 2
要4轮。贪心的想,我们要尽量多减少3,然后才减少2。
int minimumRounds(vector<int>& tasks) {
sort(tasks.begin(), tasks.end());
int ans = 0;
for (int i = 0; i < tasks.size(); ++i)
{
int tmp = tasks[i], cnt = 1;
while (i + 1 < tasks.size() && tasks[i + 1] == tmp)
{
cnt++;
i++;
}
while (cnt >= 3)
{
if (cnt == 4)
break;
cnt -= 3;
ans++;
}
while (cnt >= 2)
{
cnt -= 2;
ans++;
}
if (cnt)
return -1;
}
return ans;
}