<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>buckets Archives - Huahua&#039;s Tech Road</title>
	<atom:link href="https://zxi.mytechroad.com/blog/tag/buckets/feed/" rel="self" type="application/rss+xml" />
	<link>https://zxi.mytechroad.com/blog/tag/buckets/</link>
	<description></description>
	<lastBuildDate>Thu, 30 Aug 2018 20:33:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.8</generator>

<image>
	<url>https://zxi.mytechroad.com/blog/wp-content/uploads/2017/09/cropped-photo-32x32.jpg</url>
	<title>buckets Archives - Huahua&#039;s Tech Road</title>
	<link>https://zxi.mytechroad.com/blog/tag/buckets/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>花花酱 LeetCode 347. Top K Frequent Elements</title>
		<link>https://zxi.mytechroad.com/blog/hashtable/leetcode-347-top-k-frequent-elements/</link>
					<comments>https://zxi.mytechroad.com/blog/hashtable/leetcode-347-top-k-frequent-elements/#respond</comments>
		
		<dc:creator><![CDATA[zxi]]></dc:creator>
		<pubDate>Sun, 22 Oct 2017 07:05:08 +0000</pubDate>
				<category><![CDATA[Hashtable]]></category>
		<category><![CDATA[Medium]]></category>
		<category><![CDATA[buckets]]></category>
		<category><![CDATA[frequency]]></category>
		<category><![CDATA[medium]]></category>
		<category><![CDATA[priority queue]]></category>
		<guid isPermaLink="false">http://zxi.mytechroad.com/blog/?p=669</guid>

					<description><![CDATA[<p>Problem: Given a non-empty array of integers, return the k most frequent elements. For example, Given [1,1,1,2,2,3] and k = 2, return [1,2]. Note: You&#8230;</p>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/hashtable/leetcode-347-top-k-frequent-elements/">花花酱 LeetCode 347. Top K Frequent Elements</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><iframe width="500" height="375" src="https://www.youtube.com/embed/lm6pBga98-w?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe></p>
<p><strong>Problem:</strong></p>
<p>Given a non-empty array of integers, return the k most frequent elements.</p>
<p>For example,<br />
Given [1,1,1,2,2,3] and k = 2, return [1,2].</p>
<p>Note:<br />
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.<br />
Your algorithm&#8217;s time complexity must be better than O(n log n), where n is the array&#8217;s size.</p>
<p><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><br />
<ins class="adsbygoogle" style="display: block; text-align: center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-2404451723245401" data-ad-slot="7983117522"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>
<p><strong>Idea:</strong></p>
<p><a href="http://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95.png"><img class="alignnone size-full wp-image-677" src="http://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95.png" alt="" width="960" height="540" srcset="https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95.png 960w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95-300x169.png 300w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95-768x432.png 768w, https://zxi.mytechroad.com/blog/wp-content/uploads/2017/10/347-ep95-624x351.png 624w" sizes="(max-width: 960px) 100vw, 960px" /></a></p>
<p>&nbsp;</p>
<h1>Solution 2: Priority queue / max heap</h1>
<p>Time complexity: O(n) + O(nlogk)</p>
<p>Space complexity: O(n)</p>
<p><div class="responsive-tabs">
<h2 class="tabtitle">C++</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahuas
// Running time: 16 ms
class Solution {
public:
  vector&lt;int&gt; topKFrequent(vector&lt;int&gt;&amp; nums, int k) {
    unordered_map&lt;int, int&gt; count;        
    for (const int num : nums)
      ++count[num];
    priority_queue&lt;pair&lt;int, int&gt;&gt; q;
    for (const auto&amp; pair : count) {
      q.emplace(-pair.second, pair.first);
      if (q.size() &gt; k) q.pop();
    }
    vector&lt;int&gt; ans;
    for (int i = 0; i &lt; k; ++i) {
      ans.push_back(q.top().second);
      q.pop();
    }
    return ans;
  }
};</pre><p></div><h2 class="tabtitle">Java</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 56 ms
class Solution {
  public List&lt;Integer&gt; topKFrequent(int[] nums, int k) {    
    Map&lt;Integer, Integer&gt; counts = new HashMap&lt;&gt;();    
    for (int num : nums)
      counts.put(num, counts.getOrDefault(num, 0) + 1);    
    
    PriorityQueue&lt;int[]&gt; queue = new PriorityQueue&lt;&gt;((x, y) -&gt; x[0] - y[0]);
    for (Integer num : counts.keySet()) {
      queue.offer(new int[]{counts.get(num), num});
      if (queue.size() &gt; k) queue.poll();
    }
        
    List&lt;Integer&gt; ans = new ArrayList&lt;&gt;();
    for (int i = 0; i &lt; k; ++i)
      ans.add(queue.poll()[1]);
    return ans;    
  }
}</pre><p></div><h2 class="tabtitle">Python</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">"""
Author: Huahua
Running time: 56 ms
"""
class Solution:
  def topKFrequent(self, nums, k):
    counts = collections.Counter(nums)
    h = []
    for num in counts.keys():
      heapq.heappush(h, (counts[num], num))
      if len(h) &gt; k: heapq.heappop(h)
    return [heapq.heappop(h)[1] for i in range(k)]</pre><p></div></div></p>
<h1><strong>Solution 3: Bucket Sort</strong></h1>
<p>Time complexity: O(n)</p>
<p>Space complexity: O(n)</p>
<p><div class="responsive-tabs">
<h2 class="tabtitle">C++/hashmap</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">class Solution {
public:
    vector&lt;int&gt; topKFrequent(vector&lt;int&gt;&amp; nums, int k) {
        unordered_map&lt;int, int&gt; count;
        int max_freq = 1;
        for (const int num : nums)
            max_freq = max(max_freq, ++count[num]);
        map&lt;int, vector&lt;int&gt;&gt; buckets;
        for (const auto&amp; kv : count)
            buckets[kv.second].push_back(kv.first);
        vector&lt;int&gt; ans;
        for (int i = max_freq; i &gt;= 1; --i) {
            auto it = buckets.find(i);
            if (it == buckets.end()) continue;
            ans.insert(ans.end(), it-&gt;second.begin(), it-&gt;second.end());
            if (ans.size() == k) return ans;
        }
        return ans;
    }
};</pre><p></div><h2 class="tabtitle">C++/array</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">class Solution {
public:
    vector&lt;int&gt; topKFrequent(vector&lt;int&gt;&amp; nums, int k) {
        unordered_map&lt;int, int&gt; count;
        for (const int num : nums)
            ++count[num];
        vector&lt;vector&lt;int&gt;&gt; buckets(nums.size() + 1);
        for (const auto&amp; kv : count)
            buckets[kv.second].push_back(kv.first);
        vector&lt;int&gt; ans;
        for (auto it = buckets.rbegin(); it != buckets.rend(); ++it) {
            const vector&lt;int&gt;&amp; keys = *it;
            if (keys.empty()) continue;
            ans.insert(ans.begin(), keys.begin(), keys.end());
            if (ans.size() == k) return ans;
        }
        return ans;
    }
};</pre><p></div><h2 class="tabtitle">Java</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">// Author: Huahua
// Running time: 23 ms
class Solution {
  public List&lt;Integer&gt; topKFrequent(int[] nums, int k) {
    List[] buckets = new List[nums.length + 1];
    Map&lt;Integer, Integer&gt; counts = new HashMap&lt;&gt;();

    for (int num : nums)      
      counts.put(num, counts.getOrDefault(num, 0) + 1);    
        
    for (int num : counts.keySet()) {
      int count = counts.get(num);
      if (buckets[count] == null)
        buckets[count] = new ArrayList&lt;Integer&gt;();
      buckets[count].add(num);
    }
    
    List&lt;Integer&gt; ans = new ArrayList&lt;&gt;();
    for (int i = buckets.length - 1; i &gt; 0 &amp;&amp; ans.size() &lt; k; --i) {
      if (buckets[i] != null) ans.addAll(buckets[i]);      
    }
    return ans;    
  }
}</pre><p></div><h2 class="tabtitle">Python</h2>
<div class="tabcontent">
</p><pre class="crayon-plain-tag">"""
Author: Huahua
Running time: 64 ms
"""
class Solution:
  def topKFrequent(self, nums, k):
    counts = collections.Counter(nums)
    buckets = [[] for _ in range(len(nums) + 1)]    
    for num in counts.keys():
      buckets[counts[num]].append(num)
    ans = []
    for i in range(len(nums), 0, -1):      
      ans += buckets[i]      
      if len(ans) == k: return ans
    return ans</pre><p></div></div></p>
<h1><strong>Related Problems</strong></h1>
<ul>
<li><a href="http://zxi.mytechroad.com/blog/heap/leetcode-692-top-k-frequent-words/">[解题报告] LeetCode 692. Top K Frequent Words</a></li>
</ul>
<p>The post <a rel="nofollow" href="https://zxi.mytechroad.com/blog/hashtable/leetcode-347-top-k-frequent-elements/">花花酱 LeetCode 347. Top K Frequent Elements</a> appeared first on <a rel="nofollow" href="https://zxi.mytechroad.com/blog">Huahua&#039;s Tech Road</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zxi.mytechroad.com/blog/hashtable/leetcode-347-top-k-frequent-elements/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
