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