मान लीजिए हमारे पास nums नामक संख्याओं की एक लिस्ट है और एक मान k है, हमें उन सबलिस्ट की संख्या ढूंढनी है जिनमें ठीक k यूनिक संख्याएं हों।
उदाहरण के लिए, यदि इनपुट nums = [2, 2, 3, 4], k = 2 है, तो आउटपुट 3 होगा, क्योंकि हमारे पास सबलिस्ट हैं: [2, 2, 3], [2, 3], [3, 4]।
समाधान दृष्टिकोण
इस समस्या को हल करने के लिए हम स्लाइडिंग विंडो तकनीक का उपयोग करेंगे:
- count(K) फंक्शन परिभाषित करें:
- slot := एक खाली मैप (Counter), डिफ़ॉल्ट मान 0
- i := 0, res := 0
- प्रत्येक इंडेक्स j और मान x के लिए nums में:
- slot[x] := slot[x] + 1
- जब तक slot का आकार > K है:
- slot[nums[i]] := slot[nums[i]] - 1
- यदि slot[nums[i]] == 0 है, तो slot[nums[i]] हटाएं
- i := i + 1
- res := 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