Program to find minimum numbers of function calls to make target array using Python


Suppose we have following function definition:

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

We have to find minimum number of function calls required to make a given array nums from one zero array of same size?

So, if the input is like nums = [1,5,3], then the output will be 7 because, initially all elements are 0, [0,0,0]

  • At first step increase second element by 1, so array is [0,1,0]

  • Double second element to make it [0,2,0]

  • Increase third element by 1, so array is [0,2,1]

  • Double elements from index 1 to 2, so array is [0,4,2]

  • Increase all elements by 1 [three operations in total here]

so total 3+4 = 7 operations required.

To solve this, we will follow these steps −

  • ans := an array with two elements all are 0

  • for each n in nums, do

    • double := 0

    • while n is non-zero, do

      • if n is odd, then

        • n := quotient of n/2

        • double := double + 1

      • otherwise,

        • n := n - 1

        • ans[0] := ans[0] + 1

    • ans[1] := maximum of ans[1] and double

  • return sum of all elements of ans

Let us see the following implementation to get better understanding −

Example

 Live Demo

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))

Input

[1,5,3]

Output

7

Updated on: 29-May-2021

208 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements