मान लीजिए कि हमारे पास nums नामक एक सूची है और एक मान k है, अब आइए एक ऑपरेशन पर विचार करें जिसके द्वारा हम सूची में किसी भी संख्या के मान को अपडेट कर सकते हैं। हमें सबसे लंबी सबलिस्ट की लंबाई का पता लगाना है जिसमें अधिकांश k ऑपरेशन करने के बाद बार-बार नंबर होते हैं।
इसलिए, यदि इनपुट अंकों की तरह है =[8, 6, 6, 4, 3, 6, 6] k =2, तो आउटपुट 6 होगा, क्योंकि हम इस सरणी को बनाने के लिए 4 और 3 से 6 बदल सकते हैं [ 8, 6, 6, 6, 6, 6, 6], और सभी 6s के साथ सबलिस्ट की लंबाई 6 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
अगर अंक खाली हैं, तो
-
वापसी 0
-
-
num_count :=एक खाली नक्शा
-
max_count :=0
-
प्रारंभ:=0
-
प्रत्येक अनुक्रमणिका के अंत और अंकों में मान संख्या के लिए, करें
-
num_count[num] :=num_count[num] + 1
-
max_count :=अधिकतम max_count और num_count[num]
-
यदि अंत - प्रारंभ + 1> max_count + k, तब
-
num_count[nums[start]] :=num_count[nums[start]] - 1
-
प्रारंभ:=प्रारंभ + 1
-
-
-
वापसी का अंत - प्रारंभ + 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from collections import defaultdict def solve(nums, k): if not nums: return 0 num_count = defaultdict(int) max_count = 0 start = 0 for end, num in enumerate(nums): num_count[num] += 1 max_count = max(max_count, num_count[num]) if end - start + 1 > max_count + k: num_count[nums[start]] -= 1 start += 1 return end - start + 1 nums = [8, 6, 6, 4, 3, 6, 6] k = 2 print(solve(nums, k))
इनपुट
[8, 6, 6, 4, 3, 6, 6], 2
आउटपुट
6