今日重点:
贪心
题目详情:LCP 06. 拿硬币
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。
示例 1:
输入:[4,2,1]
输出:4
解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。
我的代码:
class Solution {
public:
int minCount(vector<int>& coins) {
int i,num=0;
for(i=0;i<coins.size();i++)
{
while(coins[i]>2)
{
num++;
coins[i]-=2;
}
num++;
}
return num;
}
};
题目总结感受:
总体来讲已经尽可能的在缩小存储空间的使用,但大概占用还是在8.0MB以上,因为只能一次取一或两个,所以贪心算法主要先对每一堆进行分析求每一堆可以取多少个两个,然后判断一下是否加1,最后把每一堆的次数加在一起,一共coins.size()堆。但是我的算法在循环中加了循环,导致每一个coin[i]都要循环一次,导致时间复杂度从正常的O(n)变成了O(n^2),浪费了时间和空间。所以还是应该尽量的少做循环,少定义变量。
官方题解:
作者:力扣官方题解
链接:https://leetcode.cn/problems/na-ying-bi/solutions/212911/na-ying-bi-by-leetcode-solution/