<p>为什么看到<code>[1, 1, 1, 1, 1]</code>(全部1)的部分问题是因为if语句中有一个错误:</p>
<pre><code> if flag or temp_balance == 100:
</code></pre>
<p>这不检查是否<code>flag is 100 or temp_balance is 100</code>,只检查是否<code>flag is non-zero OR temp_balance is 100</code>,每次迭代都是这样</p>
<p>其他一些问题:</p>
<ol>
<li>您有一个<code>cash</code>参数作为输入,但它不一定与用于跟踪注释数量的变量相关。您应该找到一些方法来根据初始<code>cash</code>数组跟踪笔记。这可以像创建另一个长度相同的数组一样简单,该数组使用所有0初始化,用于保存每个位置的现金票据计数<code>note_count = [0 for _ in cash]</code></li>
<li>不要试图为精确匹配而退出特例。它只会让你的代码变长</李>
<li>你不能用贪婪算法来解决这个问题。要使它正常工作,您需要类似于动态编程的东西。考虑你的现金值^ {< CD7> },你有^ {CD8}}。如果你使用贪婪算法,你会记3个音符,1个音符是200,2个音符是50,但是你可以用2个音符是150</李>
</ol>
<hr/>
<h2>时间复杂性(用大O表示法表示,如<code>O(n)</code>)是关于执行长度如何作为某个输入的一个因素而增长的</h2>
<p>最典型的情况是<code>n</code>表示算法迭代的项数(但它可以表示执行某些按位数学运算的算法的输入的位长度)。如果你的现金系统的上限是某个数字,比如说10,那么你用来寻找下一张钞票的循环将变成一个常数,因为你有一个常数的迭代次数来寻找下一张钞票。事实上,在你的情况下,你有一个恒定的时间复杂性,关于选择一张纸币,因为你已经明确写出了6个现金纸币的情况。这里的变量是您的输入量,因此您的时间复杂度将取决于将给定量减少到0所需的时间。你应该能够相当容易地找到这个数字(想想需要最多纸币的金额是多少,然后想想所有大于这个数字的金额)</p>
<h2>时间复杂性与两个操作之间的效率无关</h2>
<p>当您谈论<code>if, else if</code>语句以及如何生成更高效的代码时,您可能会正确地说“一个构造比另一个构造更高效或更快”,但这不是时间复杂性的含义。时间复杂度是指执行长度作为某个输入的一个因素是如何增长的。例如,通过使用字典,您可以做出稍微更有效的“选择”构造。字典具有固定的时间访问,因此无论字典中有多少项,您的时间访问都是<code>O(1)</code>。但是如果if/else语句的数量是恒定的,那么它也是<code>O(1)</code>,因为if/else语句不会增长。它可能会慢一些,但它的复杂性仍然是不变的</p>