Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm danh sách các số trong đó mỗi cửa sổ kích thước K có các phần tử duy nhất trong Python

Giả sử chúng ta có một danh sách các số được gọi là num và một số khác k, chúng ta phải tìm một danh sách đếm các số phân biệt trong mỗi cửa sổ có kích thước k.

Vì vậy, nếu đầu vào là nums =[2, 2, 3, 3, 4], k =2, thì đầu ra sẽ là [1, 2, 1, 2], như các cửa sổ là [2, 2], [2, 3], [3, 3] và [3, 4].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • c:=tạo từ điển các phần tử theo num và tần số của chúng

  • ans:=một danh sách mới

  • đối với tôi trong phạm vi từ k đến kích thước của nums, thực hiện

    • chèn kích thước của c vào cuối ans

    • c [nums [i]]:=c [nums [i]] + 1

    • c [nums [i - k]]:=c [nums [i - k]] - 1

    • nếu c [nums [i - k]] bằng 0 thì

      • loại bỏ c [nums [i - k]]

  • chèn kích thước của c vào cuối ans

  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

[2, 2, 3, 3, 4], 2

Đầu ra

[1, 2, 1, 2]