假设我们有一个非空的整数数组。我们必须返回第k个最频繁的元素。因此,如果元素为[1,1,1,1,2,2,3,3,3]且k = 2,则结果将为
正式的功能应该-
如果存在i,j,k,则返回true
因此,如果0≤i <j <k≤n-1,则arr [i] <arr [j] <arr [k]否则返回false。
为了解决这个问题,我们将遵循以下步骤-
num_freq =一个空的映射,freq_list:=一个空的映射
对于数字中的每个元素
如果我不在num_freq中,则num_freq [i]:= 1,否则将num_freq [i]增加1
对于num_freq映射中的每个键值对
如果freq_list中不存在value,则freq_list [value]:=具有[key]的列表,否则将key插入freq_list [value]数组
res:=空列表
对于我:=数字长度降至0
如果我在freq_list中,则将freq_list [i]的元素添加到res中
如果res的长度> = k,则中断
返回结果
让我们看下面的实现以更好地理解-
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))
[1,1,1,1,2,2,3,3,3] 2
输出结果
[1, 3]