মান লাগিয়ে, আমাদের নিচের ফাংশন ডেফিনিশন আছে:
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