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

Python에서 각 K 크기 창에 고유한 요소가 있는 숫자 목록을 찾는 프로그램

<시간/>

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]