目录
题目:
解题思路:
代码:
写在最后:
题目:
这是他给出的接口:
class Solution {
public:int fillCups(vector<int>& amount) {}
};
作为一个数学学渣,我想不出厉害的数学算法来解答(也看不懂)
所以就放弃思考,直接开冲。
解题思路:
根据题目可知,因为要返回最少的秒数,
所以每次装两杯水是最快的,
因此,我们可以直接开一个大堆,减去两个最多的杯数,再让秒数++,
而减到最后只剩两种情况:[1, 0, 0] 和 [0, 0, 0]
那就只需当top2为零就返回top1 + 秒数即可。
代码:
class Solution {
public:int fillCups(vector<int>& amount) {//使用优先级队列模拟一个大堆//因为优先级队列会自动排好序priority_queue<int> q;//入队for(const auto& e : amount){q.push(e);}//记录秒数int ans = 0;//循环while(1){//取出队列最大的两个数int x1 = q.top();q.pop();int x2 = q.top();q.pop();//满足[1, 0, 0] 或 [0, 0, 0]if(x2 == 0){return ans + x1;}//秒数++,减两杯ans++, x1--, x2--;q.push(x1), q.push(x2);}//最后加个return过检查return 1;}
};
这样就过了。
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。