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

Python에서 동일한 빈도로 최대 빈도 요소가 있는 가장 짧은 하위 목록의 길이를 찾는 프로그램

<시간/>

nums라는 숫자 목록이 있다고 가정합니다. nums에서 가장 빈번한 숫자의 빈도가 k인 경우. 가장 빈번한 항목의 빈도도 k가 되도록 가장 짧은 하위 목록의 길이를 찾아야 합니다.

따라서 입력이 nums =[10, 20, 30, 40, 30, 10]과 같으면 출력은 3이 됩니다. 왜냐하면 여기에서 가장 빈번한 숫자는 10과 30이고 여기서는 k =2이기 때문입니다. sublist [30, 40, 30] 이것은 30이 있고 빈도도 2인 가장 짧은 하위 목록입니다.

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

  • L :=숫자 크기
  • rnums :=숫자의 역순
  • d :=숫자로 표시되는 각 요소의 빈도를 포함하는 지도
  • mx :=d의 모든 값 목록의 최대값
  • vs :=d[k]가 mx와 같은 경우 d의 각 k에 대한 k 목록
  • mn :=엘
  • vs의 각 v에 대해 수행
    • mn :=mn의 최소값 및 ((L - (v의 인덱스(rnum)) -(v의 인덱스(숫자))
  • 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from collections import Counter
def solve(nums):
   L = len(nums)
   rnums = nums[::-1]

   d = Counter(nums)
   mx = max(d.values())
   vs = [k for k in d if d[k] == mx]

   mn = L
   for v in vs:
      mn = min(mn, (L - rnums.index(v)) - nums.index(v))
   return mn

nums = [10, 20, 30, 40, 30, 10]
print(solve(nums))

입력

[10, 20, 30, 40, 30, 10]

출력

3