Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาจำนวนการเรียกใช้ฟังก์ชันขั้นต่ำเพื่อสร้างอาร์เรย์เป้าหมายโดยใช้ 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 =[1,5,3] ผลลัพธ์จะเป็น 7 เพราะในตอนแรกองค์ประกอบทั้งหมดจะเป็น 0, [0,0,0]

  • ในขั้นตอนแรกเพิ่มองค์ประกอบที่สองขึ้น 1 ดังนั้นอาร์เรย์จึงเป็น [0,1,0]

  • องค์ประกอบที่สองที่สองเพื่อให้เป็น [0,2,0]

  • เพิ่มองค์ประกอบที่สามขึ้น 1 ดังนั้นอาร์เรย์จึงเป็น [0,2,1]

  • องค์ประกอบคู่จากดัชนี 1 ถึง 2 ดังนั้นอาร์เรย์จึงเป็น [0,4,2]

  • เพิ่มองค์ประกอบทั้งหมด 1 [สามการดำเนินงานทั้งหมดที่นี่]

ดังนั้นทั้งหมด 3+4 =7 การดำเนินการที่จำเป็น

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ans :=อาร์เรย์ที่มีสององค์ประกอบทั้งหมดเป็น 0

  • สำหรับแต่ละ n เป็น num ทำ

    • สองเท่า :=0

    • ในขณะที่ n ไม่ใช่ศูนย์ ให้ทำ

      • ถ้า n เป็นเลขคี่ แล้ว

        • n :=ผลหารของ n/2

        • สองเท่า :=สองเท่า + 1

      • มิฉะนั้น

        • n :=n - 1

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

    • ans[1] :=สูงสุดของ ans[1] และสองเท่า

  • คืนค่าผลรวมขององค์ประกอบทั้งหมดของ 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