একটি লিস্ট nums এবং একটি মান k দেওয়া আছে। যাচাই করতে হবে কি লিস্টকে এমন সাবলিস্টগুলিতে ভাগ করা যায় যাতে প্রতিটি সাবলিস্টের দৈর্ঘ্য k-র চেয়ে বড় বা সমান এবং স্ট্রিক্টলি ইনক্রিজিং হয়। সাবলিস্টগুলো কন্টিগুয়াস হতে হবে না।
উদাহরণস্বরূপ, nums = [6, 7, 5, 10, 13], k = 2 হলে আউটপুট True, কারণ [5,6] এবং [7,10,13]-এ ভাগ করা যায়।
সমাধানের পদ্ধতি (ফ্রিকোয়েন্সি-বেজড লজিক)
যেহেতু সাবলিস্টগুলো কন্টিগুয়াস হতে হবে না, তাই একই ভ্যালুয়ের এলিমেন্টগুলো আলাদা সাবলিস্টে যেতে হবে। সর্বোচ্চ ফ্রিকোয়েন্সি max_count হলে, কমপক্ষে max_countটি সাবলিস্ট লাগবে। প্রতিটি সাবলিস্টের দৈর্ঘ্য k হলে মোট এলিমেন্ট লাগবে max_count * k। তাই শর্ত: max_count * k <= len(nums)।
পাইথন কোড উদাহরণ
from collections import Counter
class Solution:
def solve(self, nums, k):
c = Counter(nums)
max_count = max(c.values())
return max_count * k <= len(nums)
ob = Solution()
nums = [6, 7, 5, 10, 13]
k = 2
print(ob.solve(nums, k))
ইনপুট
[6, 7, 5, 10, 13], 2
আউটপুট
True