ধরুন আমাদের কাছে nums নামে একটি তালিকা আছে এবং একটি মান k আছে, এখন আসুন একটি অপারেশন বিবেচনা করি যার মাধ্যমে আমরা তালিকার যেকোনো সংখ্যার মান আপডেট করতে পারি। আমাদের সবচেয়ে দীর্ঘতম সাবলিস্টের দৈর্ঘ্য খুঁজে বের করতে হবে যেটিতে সর্বাধিক k ক্রিয়াকলাপ সম্পাদন করার পরে পুনরাবৃত্তি সংখ্যা রয়েছে৷
সুতরাং, ইনপুট যদি nums =[8, 6, 6, 4, 3, 6, 6] k =2 এর মত হয়, তাহলে আউটপুট হবে 6, কারণ আমরা এই অ্যারেটি তৈরি করতে 4 এবং 3 থেকে 6 পরিবর্তন করতে পারি। 8, 6, 6, 6, 6, 6, 6], এবং সমস্ত 6s সহ সাবলিস্টের দৈর্ঘ্য is6৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
যদি সংখ্যা খালি হয়, তাহলে
-
রিটার্ন 0
-
-
num_count :=একটি খালি মানচিত্র
-
max_count :=0
-
শুরু :=0
-
প্রতিটি সূচকের শেষে এবং মানের সংখ্যার জন্য, করুন
-
num_count[num] :=num_count[num] + 1
-
সর্বাধিক_গণনা :=সর্বাধিক_গণনা এবং সংখ্যা_গণনা [সংখ্যা]
-
যদি শেষ হয় - শুরু + 1> max_count + k, তারপর
-
num_count[সংখ্যা[শুরু]] :=সংখ্যা_গণনা[সংখ্যা[শুরু]] - 1
-
start :=start + 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