java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
文章目录
解题思路:时间复杂度O( n n n),空间复杂度O( 1 1 1) |
---|
- 贪心算法,因为及其的简单,所以大家看代码注释即可
- 给出两种实现思路,第二种代码更为简单明了
代码 |
---|
- 实现1
class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0,ten = 0;//5和10面值的钞票剩余数量
for (int i = 0; i < bills.length; i++) {
if (bills[i]==5) five++;//如果正好收5面值,不用找钱
else if (bills[i]==10) {//如果是10元,需要找5元
if (five<0)return false;//如果没有5元,就破产
five--;
ten++;
}
else {//如果是20元,需要找15元有两种方案:10+5,或者5+5+5
if (ten>0 && five>0){//如果有10+5,就找10+5
five--;
ten--;
}//没有10+5,只能找5+5+5
else if (five>=3) five-=3;//如果有5+5+5,就找给他
else return false;//否则破产
}
}
return true;
}
}
- 实现2
class Solution {
public boolean lemonadeChange(int[] bills) {
int five = 0,ten = 0;//5和10面值的钞票剩余数量
for (int i = 0; i < bills.length; i++) {
if (bills[i]==5) five++;//如果正好收5面值,不用找钱
else if (bills[i]==10) {//如果是10元,需要找5元,收获一张10元
five--; ten++;
} else {//如果是20元,需要找15元有两种方案:10+5,或者5+5+5
if (ten>0){//如果有10,尝试找10+5
five--; ten--;
}else five-=3;//如果没有10元,就尝试找5+5+5
}
if(five < 0 ) return false;//如果最后5元根本不够找,破产
}
return true;
}
}