Medium
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 <= 105
-104 <= nums[i] <= 104
k
is in the range [1, the number of unique elements in the array]
.Follow up: Your algorithm’s time complexity must be better than O(n log n)
, where n is the array’s size.
import "sort"
type kvPair struct {
Key int
Value int
}
func topKFrequent(nums []int, k int) []int {
m := make(map[int]int)
for _, v := range nums {
if val, ok := m[v]; ok {
m[v] = val + 1
} else {
m[v] = 1
}
}
var pairs []kvPair
for k, v := range m {
pairs = append(pairs, kvPair{k, v})
}
sort.Slice(pairs, func(i, j int) bool {
return pairs[i].Value > pairs[j].Value
})
var sortedKeys []int
for _, pair := range pairs {
sortedKeys = append(sortedKeys, pair.Key)
}
return sortedKeys[:k]
}