ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা আছে এবং যেগুলি অ-হ্রাস না হওয়া ক্রমে বাছাই করা হয়েছে, আমাদের পরীক্ষা করতে হবে যে এটিকে পরবর্তী সংখ্যায় বিভক্ত করা যেতে পারে যেমন প্রতিটি অনুগামীর সর্বনিম্ন দৈর্ঘ্য 3 এবং এটি ধারাবাহিকভাবে বৃদ্ধি পাচ্ছে।
সুতরাং, যদি ইনপুটটি nums =[2, 3, 4, 4, 5, 6, 7] এর মত হয়, তাহলে আউটপুটটি True হবে, কারণ আমরা তালিকাটিকে [2, 3, 4] এবং [4, তে বিভক্ত করতে পারি। 5, 6, 7]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- গণনা :=একটি মানচিত্র যাতে সংখ্যা এবং এর সংখ্যার উপাদান রয়েছে
- শুরু হয় :=একটি নতুন তালিকা
- শেষ :=একটি নতুন তালিকা সাজানো ক্রমে গণনার আইটেমের প্রতিটি x-এর জন্য
- যদি গণনা [x]> গণনা [x - 1] হয়, তাহলে
- l :=আকারের তালিকা (গণনা[x] - গণনা[x - 1]) এবং x দিয়ে পূরণ করুন
- শুরুতে l ঢোকান
- যদি গণনা [x]> গণনা [x + 1], তারপর
- l :=আকারের তালিকা (গণনা[x] - গণনা[x + 1]) এবং x দিয়ে পূরণ করুন
- শুরুতে l ঢোকান
- সত্য ফেরত দিন যখন সমস্ত (শুরু, শেষ) জোড়া সন্তুষ্ট হয় (শুরু + 2 <=শেষ), অন্যথায় মিথ্যা ফেরত দেয়
- করুন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from collections import Counter class Solution: def solve(self, nums): count = Counter(nums) starts = [] ends = [] for x in sorted(count): if count[x] > count[x - 1]: starts.extend([x] * (count[x] - count[x - 1])) if count[x] > count[x + 1]: ends.extend([x] * (count[x] - count[x + 1])) return all(s + 2 <= e for s, e in zip(starts, ends)) ob = Solution() nums = [2, 3, 4, 4, 5, 6, 7] print(ob.solve(nums))
ইনপুট
[6, 7, 5, 10, 13], 2
আউটপুট
True