একটি লিস্ট nums এবং একটি মান k দেওয়া আছে। এমন সাবলিস্ট (কন্টিগুয়াস) কতটি আছে যাতে সেটিতে ঠিক kটি ইউনিক সংখ্যা থাকে, সেটি বের করতে হবে।
উদাহরণস্বরূপ, nums = [2, 2, 3, 4], k = 2 হলে আউটপুট ৩, কারণ সাবলিস্টগুলো: [2,2,3], [2,3], [3,4]।
সমাধানের পদ্ধতি (স্লাইডিং উইন্ডো + atMost(k) - atMost(k-1))
count(K)ফাংশন লিখুন যা আমসিমKটি ইউনিক এলিমেন্টসহ সাবলিস্টের সংখ্যা রিটার্ন করে।slot= ফ্রিকোয়েন্সি ম্যাপ (Counter)।i = res = 0।j= ০ থেকে n-1 পর্যন্ত লুপ:slot[x] += 1।while len(slot) > K:slot[nums[i]] -= 1; যদি ০ হয় তবে ডিলিট;i += 1।res += j - i + 1।
resরিটার্ন করুন।
- ফাইনাল আউটপুট:
count(k) - count(k-1)।
পাইথন কোড উদাহরণ
from collections import Counter
class Solution:
def solve(self, nums, k):
def count(K):
slot = Counter()
i = res = 0
for j, x in enumerate(nums):
slot[x] += 1
while len(slot) > K:
slot[nums[i]] -= 1
if slot[nums[i]] == 0:
del slot[nums[i]]
i += 1
res += j - i + 1
return res
return count(k) - count(k - 1)
ob = Solution()
nums = [2, 2, 3, 4]
k = 2
print(ob.solve(nums, k))
ইনপুট
[2, 2, 3, 4], 2
আউটপুট
3