nums라는 숫자 목록과 또 다른 숫자 k가 있다고 가정하면 크기가 k인 각 창에서 고유한 숫자의 개수 목록을 찾아야 합니다.
따라서 입력이 nums =[2, 2, 3, 3, 4], k =2와 같으면 창은 [2, 2]이므로 출력은 [1, 2, 1, 2]가 됩니다. [2, 3], [3, 3], [3, 4].
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
c :=숫자와 빈도로 요소 사전을 만듭니다.
-
ans :=새 목록
-
k 범위에서 숫자 크기까지의 i에 대해
-
ans
끝에 c 크기 삽입 -
c[숫자[i]] :=c[숫자[i]] + 1
-
c[숫자[i - k]] :=c[숫자[i - k]] - 1
-
c[nums[i - k]]가 0과 같으면
-
c[nums[i - k]]
제거
-
-
-
ans
끝에 c 크기 삽입 -
반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import Counter class Solution: def solve(self, nums, k): c = Counter() for i in range(k): c[nums[i]] += 1 ans = [] for i in range(k, len(nums)): ans.append(len(c)) c[nums[i]] += 1 c[nums[i - k]] -= 1 if c[nums[i - k]] == 0: del c[nums[i - k]] ans.append(len(c)) return ans ob = Solution() nums = [2, 2, 3, 3, 4] print(ob.solve(nums, 2))
입력
[2, 2, 3, 3, 4], 2
출력
[1, 2, 1, 2]