使用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]
第一步將第二個元素增加1,因此陣列為[0,1,0]
將第二個元素加倍使其成為[0,2,0]
將第三個元素增加1,因此陣列為[0,2,1]
將索引1到2的元素加倍,因此陣列為[0,4,2]
將所有元素增加1(此處總共三個操作)
因此,總共需要3+4 = 7個操作。
為了解決這個問題,我們將遵循以下步驟:
ans := 一個包含兩個元素且都為0的陣列
對於nums中的每個n,執行以下操作:
double := 0
當n不為零時,執行以下操作:
如果n是奇數,則
n := n/2 的商
double := double + 1
否則,
n := n - 1
ans[0] := ans[0] + 1
ans[1] := 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
廣告