Warning
Even though I solved the problem, I didn’t fully understand it.
Neetcode Answer

- The difference between mine is that he uses the frequency list, instead of looping through the dictionary at the end
My Answer
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dic = defaultdict(int)
reverseDic = defaultdict(list)
for num in nums:
dic[num] += 1
for key in dic.keys():
reverseDic[dic[key]].append(key)
res = []
remainingK = k
for i in range(10 ** 4, -10 ** 4- 1, -1):
if i in dic.values():
for val in reverseDic[i]:
if remainingK == 0:
return res
res.append(val)
remainingK -= 1
return res
My Answer Using Length of String instead (same Speed 5%)
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dic = defaultdict(int)
reverseDic = defaultdict(list)
for num in nums:
dic[num] += 1
for key in dic.keys():
reverseDic[dic[key]].append(key)
res = []
remainingK = k
for i in range(len(nums), 0, -1):
if i in dic.values():
for val in reverseDic[i]:
if remainingK == 0:
return res
res.append(val)
remainingK -= 1
return resAnother Attempt but Slower Time Expired by 1 Test case
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
dic = defaultdict(list)
for i in range(len(nums)):
dic[nums.count(nums[i])].append(nums[i])
res = []
remainingK = k
for count in range(len(nums), 0, -1):
if count in dic.keys():
for val in dic[count]:
if remainingK == 0:
return res
if val not in res:
res.append(val)
remainingK -= 1
return res