สมมติว่าเรามีคำจำกัดความของฟังก์ชันดังต่อไปนี้:
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