13 lines
7.0 KiB
HTML
13 lines
7.0 KiB
HTML
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><title> leetcode-121 · MarkDown</title><meta name="description" content="leetcode-121 - Ching"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="short icon" href="/favicon.png"><link rel="stylesheet" href="/css/apollo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600" type="text/css"><meta name="generator" content="Hexo 6.0.0"><link rel="alternate" href="/atom.xml" title="MarkDown" type="application/atom+xml">
|
||
</head><body><header><a href="/" class="logo-link"><img src="/logo.png"></a><ul class="nav nav-list"><li class="nav-list-item"><a href="/" target="_self" class="nav-list-link">ALL</a></li><li class="nav-list-item"><a href="/categories/leetcode/" target="_self" class="nav-list-link">LEETCODE</a></li><li class="nav-list-item"><a href="/atom.xml" target="_self" class="nav-list-link">RSS</a></li></ul></header><section class="container"><div class="post"><article class="post-block"><h1 class="post-title">leetcode-121</h1><div class="post-meta"><div class="post-time">2020年3月17日</div></div><div class="post-content"><h3 id="121-买卖股票的最佳时机"><a href="#121-买卖股票的最佳时机" class="headerlink" title="121. 买卖股票的最佳时机"></a>121. 买卖股票的最佳时机</h3><p><a target="_blank" rel="noopener" href="https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/">题目</a></p>
|
||
<span id="more"></span>
|
||
|
||
<p>原始答案:</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">maxProfit</span>(<span class="params">self, prices</span>) -> <span class="built_in">int</span>:</span></span><br><span class="line"> profit = <span class="number">0</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> prices:</span><br><span class="line"> <span class="keyword">return</span> profit</span><br><span class="line"> min_buyin = prices[<span class="number">0</span>]</span><br><span class="line"> max_sellout = prices[<span class="number">0</span>]</span><br><span class="line"> l = <span class="built_in">len</span>(prices)</span><br><span class="line"> i = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> buyin <span class="keyword">in</span> prices:</span><br><span class="line"> <span class="keyword">if</span> i == l:</span><br><span class="line"> <span class="keyword">return</span> profit</span><br><span class="line"> <span class="keyword">if</span> min_buyin <= buyin:</span><br><span class="line"> max_sellout = <span class="built_in">max</span>(prices[i:])</span><br><span class="line"> p = max_sellout - min_buyin</span><br><span class="line"> <span class="keyword">if</span> p > profit:</span><br><span class="line"> profit = p</span><br><span class="line"> <span class="keyword">if</span> buyin < min_buyin:</span><br><span class="line"> min_buyin = buyin</span><br><span class="line"> i += <span class="number">1</span></span><br><span class="line"> <span class="keyword">return</span> profit</span><br><span class="line"><span class="comment">#1880 ms 14.4 MB</span></span><br></pre></td></tr></table></figure>
|
||
|
||
<p>主要思路是找到波谷,如果当前价格比前一天要低,则还是在去往波谷的路上;当价格比前一天高或相同时,则到达了一个波谷,计算波谷和之后的波峰的差,就是这一段的利润。将从头至尾过一次,就能找到所有波谷和其后波峰的差,返回最大的即可。但是这个明显地在重复max,时间复杂度是O(n^2),看起来就很傻逼。</p>
|
||
<p>仔细想想,其实并不需要直接找出波谷后的波峰,只要在for loop时保持波谷为最低的那个,就能算出每一个后续与波谷的差,找最大差即可。改了下代码变成这样</p>
|
||
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">maxProfit</span>(<span class="params">self, prices</span>) -> <span class="built_in">int</span>:</span></span><br><span class="line"> profit = <span class="number">0</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> prices:</span><br><span class="line"> <span class="keyword">return</span> profit</span><br><span class="line"> min_buyin = prices[<span class="number">0</span>]</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, <span class="built_in">len</span>(prices)):</span><br><span class="line"> min_buyin = <span class="built_in">min</span>(min_buyin, prices[i-<span class="number">1</span>])</span><br><span class="line"> profit = <span class="built_in">max</span>(prices[i] - min_buyin, profit)</span><br><span class="line"> <span class="keyword">return</span> profit</span><br><span class="line"> <span class="comment">#44 ms 14.4 MB</span></span><br></pre></td></tr></table></figure>
|
||
|
||
|
||
</div></article></div></section><footer><div class="paginator"><a href="/2020/03/18/leetcode-206/" class="prev">PRVE</a><a href="/2019/11/14/AWS-KMS/" class="next">NEXT</a></div><div class="copyright"><p>© 2016 - 2022 <a href="http://blog.tunpok.com">Ching</a>, unless otherwise noted.</p></div></footer><script src="https://cdn.bootcss.com/mathjax/2.5.3/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></body></html> |