ধরুন আমাদের কাছে 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