题目
分析
其实就是两两抵消。
代码
先看我自己写的代码
class Solution
{
public:
int fillCups(vector<int>& amount)
{
int sum = 0;
sort(amount.begin(),amount.end());
if((amount[0] + amount[1]) <= amount[2])
{
return amount[2];
}
else
{
sum += amount[2];
for(int i = 0; i < amount[2]; i++)
{
if(amount[1] >= amount[0])
{
amount[1] -= 1;
}
else
{
amount[0] -=1;
}
}
sum += max(amount[0],amount[1]);
return sum;
}
}
};
别人的贪心算法。
class Solution {
public:
int fillCups(vector<int>& amount) {
sort(amount.begin(), amount.end());
if (amount[0] + amount[1] <= amount[2]) return amount[2];
else {
int t = amount[0] + amount[1] - amount[2];
return (t + 1) / 2 + amount[2];
}
}
};
大差不差,总体复杂度O(1)。
小结
简单题可从数学入手。