17 lines
6.8 KiB
HTML
17 lines
6.8 KiB
HTML
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><title> leetcode-169 · MarkDown</title><meta name="description" content="leetcode-169 - 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-169</h1><div class="post-meta"><div class="post-time">2020年3月23日</div></div><div class="post-content"><h3 id="169-多数元素"><a href="#169-多数元素" class="headerlink" title="169. 多数元素"></a>169. 多数元素</h3><p><a target="_blank" rel="noopener" href="https://leetcode-cn.com/problems/majority-element/">题目</a></p>
|
||
<span id="more"></span>
|
||
|
||
|
||
|
||
<p>一开始的思路是遍历一遍整个列表,用一个字典去记录每个元素出现的次数,当次数大于 $\cfrac{n}{2}$ 时就可以得出结果。</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">majorityElement</span>(<span class="params">self, nums</span>) -> <span class="built_in">int</span>:</span></span><br><span class="line"> d = {}</span><br><span class="line"> l = <span class="built_in">len</span>(nums)</span><br><span class="line"> <span class="keyword">for</span> n <span class="keyword">in</span> nums:</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> n <span class="keyword">in</span> d:</span><br><span class="line"> d[n] = <span class="number">0</span></span><br><span class="line"> d[n] = d[n] + <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> d[n] > l/<span class="number">2</span>:</span><br><span class="line"> <span class="keyword">return</span> n</span><br><span class="line"><span class="comment"># 64 ms 15.1 MB</span></span><br></pre></td></tr></table></figure>
|
||
|
||
<p>Python 也有专门计数的库,写起来更简单一点:</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></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">majorityElement</span>(<span class="params">self, nums</span>):</span></span><br><span class="line"> counts = collections.Counter(nums)</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">max</span>(counts.keys(), key=counts.get)</span><br><span class="line"><span class="comment"># 44 ms 15.1 MB</span></span><br></pre></td></tr></table></figure>
|
||
|
||
<p>由于要找的数出现次数大于 $\cfrac{n}{2}$,脑子里掠过一下<a target="_blank" rel="noopener" href="https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%95">蒙特卡罗算法</a>,后来在官方解答中也看到类似的思路了:</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></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">majorityElement</span>(<span class="params">self, nums</span>):</span></span><br><span class="line"> majority_count = <span class="built_in">len</span>(nums)//<span class="number">2</span></span><br><span class="line"> <span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line"> candidate = random.choice(nums)</span><br><span class="line"> <span class="keyword">if</span> <span class="built_in">sum</span>(<span class="number">1</span> <span class="keyword">for</span> elem <span class="keyword">in</span> nums <span class="keyword">if</span> elem == candidate) > majority_count:</span><br><span class="line"> <span class="keyword">return</span> candidate</span><br><span class="line"></span><br><span class="line"><span class="comment">#作者:LeetCode-Solution</span></span><br><span class="line"><span class="comment">#链接:https://leetcode-cn.com/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/</span></span><br><span class="line"><span class="comment">#来源:力扣(LeetCode)</span></span><br><span class="line"><span class="comment">#著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。</span></span><br></pre></td></tr></table></figure>
|
||
|
||
|
||
</div></article></div></section><footer><div class="paginator"><a href="/2020/03/23/leetcode-225/" class="prev">PRVE</a><a href="/2020/03/18/leetcode-206/" 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> |