{"id":952,"date":"2025-08-21T18:09:38","date_gmt":"2025-08-21T12:39:38","guid":{"rendered":"https:\/\/codeanddebug.in\/blog\/?p=952"},"modified":"2025-08-21T18:09:40","modified_gmt":"2025-08-21T12:39:40","slug":"lemonade-change","status":"publish","type":"post","link":"https:\/\/codeanddebug.in\/blog\/lemonade-change\/","title":{"rendered":"Lemonade Change | Leetcode 860 | Greedy Solution"},"content":{"rendered":"\n<p>The <strong>Lemonade Change<\/strong> problem is a very popular coding interview question and a classic example of applying the <strong>Greedy Algorithm<\/strong>. It revolves around handling money transactions in the simplest possible way while ensuring that correct change is always provided.<\/p>\n\n\n\n<p>In this blog, we will carefully understand the problem, analyze why a greedy approach is the best choice here, and then go through the optimal Python solution with explanation and complexity analysis.<\/p>\n\n\n\n<p>Here&#8217;s the [<strong><a href=\"https:\/\/leetcode.com\/problems\/lemonade-change\/description\/\" target=\"_blank\" rel=\"noreferrer noopener\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\"><span style=\"text-decoration: underline;\">Problem Link<\/span><\/mark><\/a><\/strong>] to begin with.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem Statement \u2013 What Does the Problem Say?<\/h2>\n\n\n\n<p>You are running a lemonade stand where each lemonade costs <strong>5 dollars<\/strong>. Customers come in a queue, and each one pays using a bill of <strong>5, 10, or 20 dollars<\/strong>.<\/p>\n\n\n\n<p>You must provide the correct change to each customer. Initially, you have no money in hand.<\/p>\n\n\n\n<p>Your task: <strong>Return True if you can give change to every customer in the queue, otherwise return False.<\/strong><\/p>\n\n\n\n<p><strong>Example 1:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"Input: bills = [5,5,5,10,20]\nOutput: True\nExplanation:\n- Customer 1 pays 5 \u2192 no change needed.  \n- Customer 2 pays 5 \u2192 no change needed.  \n- Customer 3 pays 5 \u2192 no change needed.  \n- Customer 4 pays 10 \u2192 give back one 5.  \n- Customer 5 pays 20 \u2192 give back one 10 and one 5.  \nAll customers receive correct change, so the answer is True.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">Input<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #CE9178\">bills = [5,5,5,10,20]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Output<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #569CD6\">True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Explanation<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">- <\/span><span style=\"color: #CE9178\">Customer 1 pays 5 \u2192 no change needed.<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">- <\/span><span style=\"color: #CE9178\">Customer 2 pays 5 \u2192 no change needed.<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">- <\/span><span style=\"color: #CE9178\">Customer 3 pays 5 \u2192 no change needed.<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">- <\/span><span style=\"color: #CE9178\">Customer 4 pays 10 \u2192 give back one 5.<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">- <\/span><span style=\"color: #CE9178\">Customer 5 pays 20 \u2192 give back one 10 and one 5.<\/span><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #CE9178\">All customers receive correct change, so the answer is True.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Example 2:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"Input: bills = [5,5,10,10,20]\nOutput: False\nExplanation:\n- Customer 1 pays 5 \u2192 no change needed.  \n- Customer 2 pays 5 \u2192 no change needed.  \n- Customer 3 pays 10 \u2192 give back one 5.  \n- Customer 4 pays 10 \u2192 give back one 5.  \n- Customer 5 pays 20 \u2192 need 15 as change, but only two 10s available (no 5).  \nCannot give correct change, so the answer is False.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Input: <\/span><span style=\"color: #9CDCFE\">bills<\/span><span style=\"color: #D4D4D4\"> = [<\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Output:<\/span><span style=\"color: #569CD6\"> False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Explanation:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\"> Customer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> pays <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\"> \u2192 no change needed.  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\"> Customer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> pays <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\"> \u2192 no change needed.  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\"> Customer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\"> pays <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\"> \u2192 give back one <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">.  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\"> Customer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\"> pays <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\"> \u2192 give back one <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">.  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\"> Customer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\"> pays <\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\"> \u2192 need <\/span><span style=\"color: #B5CEA8\">15<\/span><span style=\"color: #D4D4D4\"> as <\/span><span style=\"color: #4EC9B0\">change<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> but<\/span><span style=\"color: #D4D4D4\"> only two 10s <\/span><span style=\"color: #9CDCFE\">available<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">no<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">).  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Cannot give correct change,<\/span><span style=\"color: #9CDCFE\"> so<\/span><span style=\"color: #D4D4D4\"> the answer is<\/span><span style=\"color: #569CD6\"> False<\/span><span style=\"color: #D4D4D4\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>So the challenge is to simulate the process and ensure the right amount of change can always be given.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Intuition and Approach (Optimal \u2013 Greedy)<\/h2>\n\n\n\n<p>The greedy approach works perfectly for this problem. The key observation is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Since lemonade costs 5, we only ever need to give change in multiples of 5.<\/li>\n\n\n\n<li>We must <strong>prioritize giving larger bills first (10 + 5)<\/strong> before using smaller bills (three 5s).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Steps to Solve:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Keep track of how many <strong>5-dollar<\/strong> and <strong>10-dollar<\/strong> bills you currently have.<\/li>\n\n\n\n<li>For each customer:\n<ul class=\"wp-block-list\">\n<li>If they pay with a <strong>5<\/strong>, just increase the count of 5s.<\/li>\n\n\n\n<li>If they pay with a <strong>10<\/strong>, you must give back one 5.<\/li>\n\n\n\n<li>If they pay with a <strong>20<\/strong>, the best option is:\n<ul class=\"wp-block-list\">\n<li>First try to give one 10 and one 5.<\/li>\n\n\n\n<li>If not possible, then try to give three 5s.<\/li>\n\n\n\n<li>If neither is possible, return False.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If all customers can be served with correct change, return True.<\/li>\n<\/ol>\n\n\n\n<p>This greedy choice ensures that smaller bills are preserved for future customers where only small change might work.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Code Implementation<\/h2>\n\n\n\n<p>Here\u2019s the Python code for the <strong>Lemonade Change<\/strong> problem using the greedy method (with added comments for clarity):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Solution:\n    def lemonadeChange(self, bills: List[int]) -&gt; bool:\n        n = len(bills)\n        five = 0   # count of $5 bills\n        ten = 0    # count of $10 bills\n        \n        for i in range(0, n):\n            if bills[i] == 5:\n                five += 1\n            elif bills[i] == 10:\n                if five &gt;= 1:\n                    five -= 1\n                    ten += 1\n                else:\n                    return False\n            else:  # customer pays with 20\n                if ten &gt;= 1 and five &gt;= 1:\n                    # best case: give one $10 and one $5\n                    five -= 1\n                    ten -= 1\n                elif five &gt;= 3:\n                    # otherwise: give three $5 bills\n                    five -= 3\n                else:\n                    return False\n                    \n        return True\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">class<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">Solution<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">def<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">lemonadeChange<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">self<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">bills<\/span><span style=\"color: #D4D4D4\">: List[<\/span><span style=\"color: #4EC9B0\">int<\/span><span style=\"color: #D4D4D4\">]) -&gt; <\/span><span style=\"color: #4EC9B0\">bool<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        n = <\/span><span style=\"color: #DCDCAA\">len<\/span><span style=\"color: #D4D4D4\">(bills)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        five = <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #6A9955\"># count of $5 bills<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ten = <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\"># count of $10 bills<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> i <\/span><span style=\"color: #C586C0\">in<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">range<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">, n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> bills[i] == <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                five += <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">elif<\/span><span style=\"color: #D4D4D4\"> bills[i] == <\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> five &gt;= <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    five -= <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ten += <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\">:  <\/span><span style=\"color: #6A9955\"># customer pays with 20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> ten &gt;= <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> five &gt;= <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #6A9955\"># best case: give one $10 and one $5<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    five -= <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    ten -= <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">elif<\/span><span style=\"color: #D4D4D4\"> five &gt;= <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #6A9955\"># otherwise: give three $5 bills<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    five -= <\/span><span style=\"color: #B5CEA8\">3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">True<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Code Explanation<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The variables <code>five<\/code> and <code>ten<\/code> keep track of how many 5-dollar and 10-dollar bills you have at any point.<\/li>\n\n\n\n<li>When a customer pays:\n<ul class=\"wp-block-list\">\n<li>If they use a 5, you just keep it.<\/li>\n\n\n\n<li>If they use a 10, you must give back one 5.<\/li>\n\n\n\n<li>If they use a 20, you prefer giving one 10 and one 5 (better strategy to save smaller bills). If that is not possible, then you give three 5s.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If neither option is possible, return False immediately.<\/li>\n\n\n\n<li>If you process the entire queue successfully, return True.<\/li>\n<\/ul>\n\n\n\n<p>This approach ensures you always have the correct change in the most efficient way.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Time and Space Complexity<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Time Complexity:<\/strong>\n<ul class=\"wp-block-list\">\n<li>We only iterate through the list of customers once.<\/li>\n\n\n\n<li><strong>O(n)<\/strong> where n = number of customers.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Space Complexity:<\/strong>\n<ul class=\"wp-block-list\">\n<li>We only use two counters (<code>five<\/code> and <code>ten<\/code>).<\/li>\n\n\n\n<li><strong>O(1)<\/strong> constant extra space.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>This makes the solution both efficient and optimal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>The <strong>Lemonade Change<\/strong> problem is a classic example of a <strong>Greedy Algorithm<\/strong> where you need to make local optimal choices (giving larger bills first when returning change) to achieve the global optimal result.<\/p>\n\n\n\n<p>By simulating each transaction step by step and keeping track of 5 and 10 dollar bills, we can ensure that the change is always given correctly in <strong>O(n) time<\/strong> and <strong>O(1) space<\/strong>.<\/p>\n\n\n\n<p>This problem is a perfect demonstration of why greedy strategies often lead to the simplest and most efficient solutions.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/codeanddebug.in\/course\/zero-to-hero-python-dsa\" target=\"_blank\" rel=\"noreferrer noopener\">Join our Advance DSA COURSE<\/a><\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>For any changes to the article, kindly email at <a href=\"mailto:code@codeanddebug.in\" target=\"_blank\" rel=\"noreferrer noopener\">code@codeanddebug.in<\/a> or contact us at <a href=\"tel:+91-9712928220\" target=\"_blank\" rel=\"noreferrer noopener\">+91-9712928220<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Lemonade Change problem is a very popular coding interview question and a classic example of applying the Greedy Algorithm. It revolves around handling money transactions in the simplest possible way while ensuring that correct change is always provided. In this blog, we will carefully understand the problem, analyze why a greedy approach is the<\/p>\n","protected":false},"author":1,"featured_media":953,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[8,41],"class_list":{"0":"post-952","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-data-structures-and-algorithm","8":"category-beginner","9":"tag-easy","10":"tag-greedy-algorithm"},"featured_image_src":"https:\/\/codeanddebug.in\/blog\/wp-content\/uploads\/2025\/08\/lemonade-change-featured-image.png","author_info":{"display_name":"codeanddebug","author_link":"https:\/\/codeanddebug.in\/blog\/author\/codeanddebug\/"},"_links":{"self":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/comments?post=952"}],"version-history":[{"count":1,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/952\/revisions"}],"predecessor-version":[{"id":954,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/posts\/952\/revisions\/954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/media\/953"}],"wp:attachment":[{"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/media?parent=952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/categories?post=952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeanddebug.in\/blog\/wp-json\/wp\/v2\/tags?post=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}