买卖椰子水
Description
在海滩上,一杯椰子水的售价为5元。一名顾客一次购买一杯椰子水(按照bills支付的顺序)。
每位顾客购买椰子水时,可能向你支付 5 元、10 元或 20 元。你必须给每个顾客正确找零,对于支付 5 元的客户你无需找零,对于支付 10 元的客户你需要给客户找零 5 元,对于支付 20 元的客户你需要找零 15 元。
注意,一开始你手头没有任何零钱。
给你一个整数数组 bills,其中 bills[i] 是第 i 位顾客付的账。如果你能给每个顾客正确找零,返回true,否则返回false.
提示:
(1)1 ≤ bills.length ≤ 10^5
(2)bills[i] 不是5就是10或是20
Input
第一行输入顾客的数量n,1 ≤ n ≤ 10^5
第二行按照顾客购买的先后顺序输入顾客支付的现金(只能为5/10/20),中间用空格隔开
如:
5
5 5 5 10 20
Output
返回是否能给每个顾客正确找零
true/false
Sample
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入顾客数量
int n = scanner.nextInt();
// 输入顾客支付的现金
int[] bills = new int[n];
for (int i = 0; i < n; i++) {
bills[i] = scanner.nextInt();
}
// 返回结果
boolean result = sellingCoconutWater(bills);
System.out.println(result);
}
public static boolean sellingCoconutWater(int[] bills) {
int five = 0;
int ten = 0;
int twenty = 0;
for(int i = 0;i<bills.length;i++){
if(bills[i]==5){
five++;
}else if(bills[i]==10){
if(five==0){
return false;
}else {
five--;
ten++;
}
}else {
if(ten==0&&five<3){
return false;
} else if (ten==0&&five>=3) {
five-=3;
twenty++;
} else if (ten>0&&five==0) {
return false;
} else if (ten>0&&five>0) {
ten--;
five--;
}
}
}
return true;
}
}
思路
贪心法
每次支付5元直接five++
支付10元five- -,ten++
支付20时先给10元再给5元(只有只剩5元钞票才全部给5元)