Skip to content

Latest commit

 

History

History
47 lines (33 loc) · 1.33 KB

index.md

File metadata and controls

47 lines (33 loc) · 1.33 KB

347. Top K Frequent Elements

Given an integer array nums and an integer k, return the k most frequent elements. You may return the answer in any order.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2 Output: [1,2]

Example 2:

Input: nums = [1], k = 1 Output: [1]

Constraints

1 <= nums.length <= 10^5 -10^4 <= nums[i] <= 10^4 k is in the range [1, the number of unique elements in the array]. It is guaranteed that the answer is unique.

Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

Solution

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        count = {}
        for num in nums:
            if num in count:
                count[num] += 1
            else:
                count[num] = 1

        # find ordered list
        # Sort the dictionary keys based on their values in descending order
        sorted_keys = sorted(count, key=lambda x: count[x], reverse=True)
        return sorted_keys[:k]

Thoughts

Pretty straightforward solution. The only tricky part was getting the sorted keys acccording to dictionary values. Took help in writing the lambda function for reverse sorting the dictionary.

Time Complexity = O(nlogn) - for sorting Space complextiy = O(nlogn) - again for sorting , the dictionary takes only O(n) space