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

Python দিয়ে টার্গেট অ্যারে বানাতে মিনিমাম ফাংশন কল বের করার প্রোগ্রাম


মান লাগিয়ে, আমাদের নিচের ফাংশন ডেফিনিশন আছে:

def modify(arr, op, index):
    if op == 0:
        arr[index] += 1
    if op == 1:
        for i in range(len(arr)):
            arr[i] *=2

আমাদের একটি দেয়া অ্যারে nums কে একই আকারের একটি শূন্য অ্যারে থেকে বানাতে মিনিমাম কতবার ফাংশন কল লাগবে তা বের করতে হবে।

যেমন, ইনপুট nums = [1,5,3] হলে, আউটপুট হবে 7 কারণ, শুরুতে সব এলিমেন্ট 0, [0,0,0]

  • প্রথম ধাপে দ্বিতীয় এলিমেন্ট ১ বাড়িয়ে [0,1,0] করুন
  • দ্বিতীয় এলিমেন্ট ডাবল করে [0,2,0] করুন
  • তৃতীয় এলিমেন্ট ১ বাড়িয়ে [0,2,1] করুন
  • ইন্ডেক্স ১ থেকে ২ ডাবল করে [0,4,2] করুন
  • সব এলিমেন্ট ১ বাড়িয়ে [১,৫,৩] করুন (এখানে মোট ৩ অপারেশন)

তাই মোট ৩+৪ = ৭ অপারেশন লাগবে।

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

  • ans := দুটি এলিমেন্ট দিয়ে একটি অ্যারে সব ০
  • nums-এ থাকা প্রতিটি n জন্য:
    • double := 0
    • n নন-জিরো হওয়া পর্যন্ত:
      • যদি n বিজোড় হয়, তবে n := n//2, double := double + 1
      • অন্যথায়, n := n - 1, ans[0] := ans[0] + 1
    • ans[1] := max(ans[1], double)
  • ans-এর সব এলিমেন্টের সমষ্টি রিটার্ন করুন

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

উদাহরণ

def solve(nums):
    ans = [0, 0]
    for n in nums:
        double = 0
        while(n):
            if not n%2:
                n = n//2
                double+=1
            else:
                n-=1
                ans[0]+=1
        ans[1] = max(ans[1], double)
    return sum(ans)
nums = [1,5,3]
print(solve(nums))

ইনপুট

[1,5,3]

আউটপুট

7

  1. রিকার্সিভ ফাংশন ব্যবহার করে GCD বের করার সি প্রোগ্রাম

  2. Python দিয়ে বাইনারি গ্রিড সাজাতে মিনিমাম সোয়াপ বের করার প্রোগ্রাম

  3. পাইথনে n কে ফিবোনাচ্চি সংখ্যা গুলোর যোগফলে প্রকাশ করার ন্যূনতম সংখ্যা বের করা

  4. পাইথনে 'A' গুলো 'B' গুলোর আগে আনতে ন্যূনতম ক্যারেক্টার ডিলিট করার প্রোগ্রাম