买卖椰子水
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元)