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

পাইথনে একটি লিস্টের নির্দিষ্ট ইনডেক্সে সর্বোচ্চ মান খুঁজে বের করার প্রোগ্রাম

তিনটি মান n, total, এবং k দেওয়া আছে। আকার n এর একটি লিস্ট বিবেচনা করুন যেসবের যোগফল total এবং যেকোনো দুটি সন্নিহিত উপাদানের মধ্যে পরম পার্থক্য hoogstens 1। এমন লিস্টের ইনডেক্স k-এ পাওয়া যেতে পারে সর্বোচ্চ মান কত তা বের করুন।

উদাহরণ: n = 5, total = 15, k = 3 হলে আউটপুট 4। সম্ভাব্য লিস্ট: [3, 2, 3, 4, 3], ইনডেক্স ৩-এ সর্বোচ্চ মান ৪।

সমাধানের পদ্ধতি

বাইনারি সার্চের মাধ্যমে উত্তর x (ইনডেক্স k-এ মান) খুঁজে বের করা হয়। x দিয়ে লিস্ট বানানোর মিনিমাম যোগফল ক্যালকুলেট করুন।

  • x = ইনডেক্স k-এ মান।
  • বাম পাশে (k+1টি উপাদান): মানগুলো x, x-1, x-2, ... কমতে পারে। মিনিমাম যোগফল = অ্যারিথমেটিক সিরিজ।
  • ডান পাশে (n-kটি উপাদান): একইভাবে কমতে পারে।
  • মোট মিনিমাম যোগফল s ক্যালকুলেট করুন। যদি s > total হয়, তবে x খুব বড়।
  • বাইনারি সার্চ দিয়ে সর্বোচ্চ বৈধ x বের করুন।

পাইথন কোড

def solve(n, total, k):
    x = 0
    while True:
        # বাম পাশের মিনিমাম যোগফল
        a = k + 1
        s = (x + x - a + 1) * a // 2
        
        # ডান পাশের মিনিমাম যোগফল
        a = n - k
        s += (x + x - a + 1) * a // 2
        
        # x দুবার কাউন্ট হয়েছে, একবার বাদ দিন
        s -= x
        
        if s > total:
            break
        x += 1
    return x - 1

# টেস্ট
n = 5
total = 15
k = 3
print(solve(n, total, k))  # আউটপুট: 4

সময় জটিলতা

O(√total) - x বাড়তে থাকলে যোগফল квадраটিক বাড়ে, তাই লুপ প্রায় √total বার চলে। বাইনারি সার্চ দিয়ে O(log total) সম্ভব।

  1. Python-এ ডায়реक्टেড গ্রাফে সর্বোচ্চ রঙ মান বের করার প্রোগ্রাম

  2. লিস্টের কিউমুলেটিভ সাম বের করার পাইথন প্রোগ্রাম

  3. পাইথনে লিস্ট থেকে N বড় এলিমেন্ট বের করা

  4. পাইথনে লিস্ট থেকে সর্বোচ্চ, সর্বনিম্ন, দ্বিতীয় সর্বোচ্চ ও দ্বিতীয় সর্বনিম্ন বের করা