网站开发怎么确定价格wordpress精致博客主题
网站开发怎么确定价格,wordpress精致博客主题,重庆大渡口营销型网站建设公司推荐,wordpress模板安装后效果和预览不同860. 柠檬水找零
问题描述
在柠檬水摊上#xff0c;每一杯柠檬水售价 5 美元。
顾客排队购买#xff0c;每位顾客只买一杯#xff0c;支付的金额可能是 5、10 或 20 美元。
你最初没有任何零钱。你需要给每位顾客正确找零#xff0c;使得净交易是每位顾客向你支付 5 美元。…860. 柠檬水找零问题描述在柠檬水摊上每一杯柠檬水售价5 美元。顾客排队购买每位顾客只买一杯支付的金额可能是5、10 或 20 美元。你最初没有任何零钱。你需要给每位顾客正确找零使得净交易是每位顾客向你支付 5 美元。注意一开始你没有任何零钱。返回true如果你能给每位顾客正确找零否则返回false。示例输入:[5,5,5,10,20]输出:true解释:-前三位顾客支付5美元无需找零-第四位顾客支付10美元找零5美元-第五位顾客支付20美元找零15美元一张10美元一张5美元输入:[5,5,10,10,20]输出:false解释:-前两位顾客支付5美元-第三位顾客支付10美元找零5美元-第四位顾客支付10美元找零5美元-第五位顾客支付20美元需要找零15美元但只剩2张5美元10美元无法找零输入:[5,5,10]输出:true算法思路贪心算法核心5美元无需找零直接收下10美元必须找零5美元20美元需要找零15美元有两种方式一张10美元 一张5美元优先选择三张5美元贪心策略对于20美元的找零优先使用10美元保留更多的5美元5美元的用途更广可以找零10美元和20美元而10美元只能用于找零20美元状态只需要记录当前拥有的5美元和10美元的数量20美元不需要记录因为无法用于找零代码实现方法一贪心classSolution{/** * 判断是否能给所有顾客正确找零 * 使用贪心优先使用10美元找零20美元 * * param bills 顾客支付的账单数组每个元素为5、10或20 * return 如果能正确找零返回true否则返回false */publicbooleanlemonadeChange(int[]bills){intfive0;// 5美元的数量intten0;// 10美元的数量for(intbill:bills){if(bill5){// 收到5美元无需找零five;}elseif(bill10){// 收到10美元需要找零5美元if(five0){five--;ten;}else{// 没有5美元找零returnfalse;}}else{// bill 20// 收到20美元需要找零15美元// 优先使用105的组合贪心策略if(ten0five0){ten--;five--;}elseif(five3){// 使用555的组合five-3;}else{// 无法找零returnfalse;}}}returntrue;}}算法分析时间复杂度O(n)n 是顾客数量bills数组长度每位顾客只需要O(1)时间处理空间复杂度O(1)只使用了两个整数变量记录零钱数量算法过程1bills [5,5,5,10,20]顾客15美元five1, ten0顾客25美元five2, ten0顾客35美元five3, ten0顾客410美元有5美元five2, ten1顾客520美元有10美元和5美元使用105组合five1, ten0结果true2bills [5,5,10,10,20]顾客15美元five1, ten0顾客25美元five2, ten0顾客310美元five1, ten1顾客410美元five0, ten2顾客520美元尝试105有10美元但没有5美元尝试555只有0张5美元 3结果false测试用例publicclassMain{publicstaticvoidmain(String[]args){SolutionsolutionnewSolution();// 测试用例1标准成功案例int[]bills1{5,5,5,10,20};System.out.println(Test 1: solution.lemonadeChange(bills1));// true// 测试用例2找零失败int[]bills2{5,5,10,10,20};System.out.println(Test 2: solution.lemonadeChange(bills2));// false// 测试用例3简单成功int[]bills3{5,5,10};System.out.println(Test 3: solution.lemonadeChange(bills3));// true// 测试用例4只有5美元int[]bills4{5,5,5,5,5};System.out.println(Test 4: solution.lemonadeChange(bills4));// true// 测试用例5第一个顾客付10美元int[]bills5{10,10};System.out.println(Test 5: solution.lemonadeChange(bills5));// false// 测试用例6第一个顾客付20美元int[]bills6{20};System.out.println(Test 6: solution.lemonadeChange(bills6));// false// 测试用例7复杂成功案例int[]bills7{5,5,10,20,5,5,5,5,5,5};System.out.println(Test 7: solution.lemonadeChange(bills7));// true// 测试用例8边界情况 - 空数组int[]bills8{};System.out.println(Test 8: solution.lemonadeChange(bills8));// true// 测试用例9单个5美元int[]bills9{5};System.out.println(Test 9: solution.lemonadeChange(bills9));// true// 测试用例10全部20美元int[]bills10{20,20,20};System.out.println(Test 10: solution.lemonadeChange(bills10));// false// 测试用例11贪心策略int[]bills11{5,5,5,5,10,20};System.out.println(Test 11: solution.lemonadeChange(bills11));// true// 如果错误地使用555找零20美元会导致后续无法找零10美元// 贪心策略会保留5美元// 测试用例12大量5美元int[]bills12newint[10000];Arrays.fill(bills12,5);System.out.println(Test 12: solution.lemonadeChange(bills12));// true}}关键点贪心策略5美元比10美元更有价值优先消耗10美元保留5美元状态只需要跟踪5美元和10美元的数量20美元无法用于找零无需跟踪边界条件处理空数组返回true没有顾客需要服务第一个顾客付10或20美元无法找零返回false常见问题为什么不用考虑20美元的数量20美元无法用于找零只有5、10、20三种面额20美元太大了所以收到20美元后直接留在手里不影响后续找零。贪心策略是否是最优的5美元的灵活性更高保留更多5美元永远不会比消耗5美元更差。