Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 상위 K 빈번한 요소

<시간/>

비어 있지 않은 정수 배열이 있다고 가정합니다. k번째로 가장 빈번한 요소를 반환해야 합니다. 따라서 요소가 [1,1,1,1,2,2,3,3,3]이고 k =2이면 결과는

공식적으로 함수는 -

  • i, j, k가 있으면 true를 반환
  • arr[i]

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • num_freq =빈 지도, freq_list :=빈 지도
  • nums
      의 각 요소 i에 대해
    • i가 num_freq에 없으면 num_freq[i] :=1이고, 그렇지 않으면 num_freq[i]를 1만큼 증가
  • num_freq 맵의 각 키-값 쌍에 대해
    • 값이 freq_list에 없으면 freq_list[value] :=[key]가 있는 목록, 그렇지 않으면 freq_list[value] 배열에 키 삽입
  • res :=빈 목록
  • for i :=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]