একটি লিস্ট nums এবং মান k দেওয়া আছে। এক অপারেশনে যেকোনো সংখ্যা আপডেট করা যায়। সর্বোচ্চ k অপারেশন দিয়ে একই সংখ্যা রিপিট করে সবচেয়ে লম্বা কন্টিগুয়াস সাবলিস্টের দৈর্ঘ্য বের করুন।
উদাহরণ
nums = [8, 6, 6, 4, 3, 6, 6], k = 2 → আউটপুট: 6
4 এবং 3-কে 6 করলে: [8, 6, 6, 6, 6, 6, 6] → ৬টি 6 কন্টিগুয়াস।
এলগরিদম (স্লাইডিং উইন্ডো + ফ্রিকোয়েন্সি ম্যাপ)
- যদি
numsখালি হয়:0রিটার্ন করুন। num_count := defaultdict(int),max_count := 0,start := 0for end, num in enumerate(nums):num_count[num]++,max_count = max(max_count, num_count[num])- যদি
end - start + 1 > max_count + k:num_count[nums[start]]--,start++
end - start + 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)) # আউটপুট: 6
ইনপুট / আউটপুট
[8, 6, 6, 4, 3, 6, 6], 2 6