Top K Frequent Elements in Python


Suppose we have a non-empty array of integer numbers. we have to return the kth most frequent elements. So if the elements are [1,1,1,1,2,2,3,3,3] and k = 2, then the result will be

Formally the function should −

  • Return true if there exists i, j, k
  • such that arr[i] < arr[j] < arr[k] given 0 ≤ i < j < k ≤ n-1 else return false.

To solve this, we will follow these steps −

  • num_freq = an empty map, freq_list := an empty map
  • for each element i in nums
    • if i is not in num_freq, then num_freq[i] := 1, otherwise increase num_freq[i] by 1
  • for each key-value pair in num_freq map
    • if value is not present in freq_list, then freq_list[value] := a list with [key], otherwise insert key into freq_list[value] array
  • res := empty list
  • for i := length of numbers down to 0
    • if i in freq_list, then add elements of freq_list[i] into res
    • if length of res >= k, then break
  • return result

Let us see the following implementation to get better understanding −

Example

 Live Demo

class Solution(object):
   def topKFrequent(self, nums, k):
      number_frequency = {}
      frequency_list ={}
      for i in nums:
         if i not in number_frequency:
            number_frequency[i] = 1
         else:
            number_frequency[i] += 1
      for key,value in number_frequency.items():
         if value not in frequency_list:
            frequency_list[value] = [key]
         else:
            frequency_list[value].append(key)
      result = []
      for i in range(len(nums),0,-1):
         if i in frequency_list:
            result.extend(frequency_list[i])
         if len(result) >=k:
            break
      return result
ob1 = Solution()
print(ob1.topKFrequent([1,1,1,1,2,2,3,3,3], 2))

Input

[1,1,1,1,2,2,3,3,3]
2

Output

[1, 3]

Updated on: 04-May-2020

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements