মনে করুন nums নামে একটি অ্যারে আছে, আমাদের অ্যারেটিকে কিছু পার্টিশনে ভাগ করতে হবে, এবং প্রতিটিইندিভিজুয়ালি সর্ট করতে হবে। এখন তাদের কনক্যাটেনেট করার পর আমরা একটি সর্টেড অ্যারে পাব। আমাদের সর্বোচ্চ কতগুলো পার্টিশন বানাতে পারি তা বের করতে হবে।
সুতরাং, যদি ইনপুট হয় [3,2,4,5,5], তবে আউটপুট হবে 4, কারণ আমরা পার্টিশন বানাতে পারি [3,2], [4], [5], [5]।
এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব −
real := nums তালিকাটি সর্ট করুন
p1 := 0, p2 := 1, c := 0
অনন্ত লুপে নিচের কাজ করুন
flag := True
tmp := nums[p1 থেকে p2-1] সাবলিস্ট সর্ট করুন
j = 0 থেকে tmp-এর আকার পর্যন্ত জন্য, করুন
যদি tmp[j] != real[p1+j] হয়, তবে
flag := False
p2 := p2 + 1
লুপ থেকে বের হোন
যদি flag true হয়, তবে
p1 := p2
p2 := p2+1
c := c + 1
যদি p1 == nums-এর আকার বা p2 > nums-এর আকার হয়, তবে
c রিটার্ন করুন
উদাহরণ
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন
def solve(nums): real = sorted(nums) p1, p2, c = 0, 1, 0 while True: flag = True tmp = sorted(nums[p1:p2]) for j in range(len(tmp)): if tmp[j] != real[p1+j]: flag = False p2 += 1 break if flag: p1, p2 = p2, p2+1 c += 1 if p1 == len(nums) or p2 > len(nums): return c nums = [3,2,4,5,5] print(solve(nums))ইনপুট
{3,2,4,5,5}আউটপুট
4