思路:因为装满冷温热水没有特殊要求,我们将amount直接排序,并依次赋值给x,y,z;如果x+y<=z那么最短总时长一定为z;再来讨论x+y>z,用x尽可能将y和z减小到两者相等或者差值最小后,再装z次即可
class Solution {
public:
int fillCups(vector<int>& amount) {
sort(amount.begin(),amount.end());
int x=amount[0],y=amount[1],z=amount[2];
int count=0;
if(x+y<=z) return z;
else {
while(x!=0){
if(z>y){
z--;
count++;
}
else {
y--;
count++;
}
x--;
}
}
return count+z;
}
};
第二题:6113. 无限集中的最小数字
思路:运用stl中的set,它是排好序并且没有重复元素的一个容器,数据其实也并不是无限的,而是在1到1000内,所以我们直接初始化1到1000,然后再完成相应操作即可
class SmallestInfiniteSet {
public:
set<int> res;//1、set中的元素都是排好序的,2、set集合中没有重复的元素
SmallestInfiniteSet() {
for(int i=1;i<=1000;i++)
res.insert(i);//因为数据范围在1到1000 直接初始化就可以
}
int popSmallest() {
int t=*res.begin();//res.begin()表示首元素的地址
res.erase(res.begin());
return t;
}
void addBack(int num) {
res.insert(num);
}
};
/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* SmallestInfiniteSet* obj = new SmallestInfiniteSet();
* int param_1 = obj->popSmallest();
* obj->addBack(num);
*/