思路: 使用 贪心算法 的思想
题目: 柠檬水找零
在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,一次购买一杯。
每位顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。必须给每个顾客正确找零
注意,一开始你手头没有任何零钱。
如果你能给每位顾客正确找零,返回 true ,否则返回false
思路: 使用 贪心算法 的思想
- 本题中找零是不需要用到20美元的,但是需要用到 5 美元和 10 美元,因此需要记录现在手上有多少张 5 美元和 10 美元。
- 5 美元:不需要找零,直接数量+1即可;
- 10 美元:只能找 5 美元,因此手上的 5 美元 -1,10 美元+1;
- 20 美元:有两种方法:
- 第一种:3 张 5 美元,显然不是最优解,因为我们需要更多的 5美元来找零;
- 第二种:一张 5 美元和 一张 10 美元,优先选择该方式找零。
package bilibili;/*** @author: Arbicoral* @create: 2023-07-18 12:25* @Description: 贪心算法*/
public class GreedyByLemonChange {public static void main(String[] args) {System.out.println(change(new int[]{5, 10 ,20}));}private static boolean change(int[] arr) {int five = 0, ten = 0;// 表示手上有 5美元、10美元的个数for (int num : arr) {if (num == 5){++five;}if (num ==10) {if (five== 0){return false;//five不够一个了,就返回false}--five;++ten;}if (num == 20){if (ten>=1 && five>=1){// 先判断有没有 5 10的,保证局部最优ten--;five--;} else if (five >= 3) {five -= 3;}else {return false;}}}return true;}
}