কম্পিউটার টিউটোরিয়াল

Python দিয়ে আকার M-এর সর্বশেষ গ্রুপ বের করার প্রোগ্রাম


মান লাগিয়ে, আমাদের একটি অ্যারে arr আছে যা 1 থেকে n পর্যন্ত সংখ্যার পারমুটেশন ধারণ করে। যদি আমাদের একটি বাইনারি স্ট্রিং থাকে যার আকার n এবং শুরুতে এর সব বিট শূন্য। এখন প্রতিটি ধাপ i-তে (ইন্ডেক্সিং ১ থেকে শুরু হয় বাইনারি স্ট্রিং এবং arr উভয়ের জন্য) 1 থেকে n পর্যন্ত, arr[i] পজিশনের বিট ১ করা হয়। আমাদের আরেকটি মান m আছে, এবং আমাদের সেই সর্বশেষ ধাপটি বের করতে হবে যেখানে আকার m-এর একটি গ্রুপ অফ Ones থাকে। এখানে গ্রুপ অফ Ones মানে ১-র একটি কন্টিগুয়াস সাবস্ট্রিং যা যেকোনো দিকেই এক্সটেন্ড করা যাবে না। আমাদের সঠিক আকার m-এর একটি গ্রুপ অফ Ones থাকা সর্বশেষ ধাপটি বের করতে হবে। যদি ऐसा কোনো গ্রুপ না পাই, তবে -1 রিটার্ন করুন।

যেমন, ইনপুট arr = [3,5,1,2,4], m = 3 হলে, আউটপুট হবে 4 কারণ, প্রারম্ভিক বাইনারি স্ট্রিং "00000" তারপর ধাপগুলো:

  • "00100", গ্রুপস: ["1"]
  • "00101", গ্রুপস: ["1", "1"]
  • "10101", গ্রুপস: ["1", "1", "1"]
  • "11101", গ্রুপস: ["111", "1"]
  • "11111", গ্রুপস: ["11111"]

এখানে আকার ৩-এর একটি গ্রুপ থাকা সর্বশেষ ধাপ হল ধাপ ৪।

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব:

  • n := arr-এর আকার
  • num := 0
  • ans := -1
  • l := আকার n-এর একটি অ্যারে, ০ দিয়ে ভরা
  • r := আকার n-এর একটি অ্যারে, ০ দিয়ে ভরা
  • i = 0 থেকে n - 1 পর্যন্ত লুপ:
    • cur := 1
    • idx := arr[i] - 1
    • যদি r[idx] == m হয়, তবে num := num - 1
    • যদি l[idx] == m হয়, তবে num := num - 1
    • cur := cur + l[idx] + r[idx]
    • num := num + (cur == m)
    • যদি num > 0 হয়, তবে ans := max(ans, i + 1)
    • যদি idx - l[idx] > 0 হয়, তবে r[idx - l[idx] - 1] := cur
    • যদি idx + r[idx] < n - 1 হয়, তবে l[idx + r[idx] + 1] := cur
  • ans রিটার্ন করুন

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশন দেখুন:

উদাহরণ

def solve(arr, m):
    n = len(arr)
    num = 0
    ans = -1
    l = [0] * n
    r = [0] * n
    for i in range(n):
        cur = 1
        idx = arr[i] - 1
        if r[idx] == m:
            num -= 1
        if l[idx] == m:
            num -= 1
        cur += l[idx] + r[idx]
        num += cur == m
        if num > 0:
            ans = max(ans, i + 1)
        if idx - l[idx] > 0:
            r[idx - l[idx] - 1] = cur
        if idx + r[idx] < n - 1:
            l[idx + r[idx] + 1] = cur
    return ans
arr = [3,5,1,2,4]
m = 3
print(solve(arr, m))

ইনপুট

[3,5,1,2,4], 3

আউটপুট

4

  1. পাইথনে রিডিউস ফাংশন ব্যবহার করে পূর্ণসংখ্যার গুণফল বের করার প্রোগ্রাম

  2. পাইথনে পলিগনের ক্ষেত্রফল বের করার প্রোগ্রাম

  3. পাইথনে পলিগনের পরিসীমা বের করার প্রোগ্রাম

  4. পাইথনে সর্বোচ্চ ক্রমবর্ধমান সাবসিকোয়েন্সের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম