簡體   English   中英

找到總和最大的 idx

[英]Find an idx with the maximum sum

所以我需要編寫一個遞歸程序,它返回一個索引,以便直到它的元素的總和是最大的。 例如列表[1,-5,9,-12,3,3,3,2] ,元素總和最大的 idx 為2 另一個例子:列表[1,-5,9,7] ,在這種情況下將返回的 idx 是3 如果有人知道該怎么做,或者知道有人在論壇中提出的類似問題,那將會很有幫助。 謝謝

您需要為總和輸入一個較低的估計值,這就是我使用 min(list_of_numbers)*100 的原因。 您可能需要對其進行修改,如果您可以使用 numpy,我建議將該值替換為 -np.inf

list_of_numbers = [1,-5,9,-12,3,3,3,2]

def maxSumId(list_of_numbers):
    id_max = 0
    sumVal = 0
    maxVal = min(list_of_numbers)*100
    for i,number in enumerate(list_of_numbers):
        sumVal += number
        if sumVal > maxVal:
            maxVal = sumVal
            id_max = i
    return id_max
    
maxSumId(list_of_numbers)

您的遞歸可以輕松計算累積和,但它需要攜帶最大值及其索引才能返回索引而不是值。

# L:list, i:current index, s:current sum, mi:max sum index, ms:max sum value

def iMaxSum(L,i=0,s=0,mi=0,ms=None):
    if i>=len(L): return mi           # end of list return max index
    if ms is None or L[i]+s>ms:       # track max sum and its index 
        ms,mi = s + L[i],i
    return iMaxSum(L,i+1,s+L[i],mi,ms) # next item,index,sum

    
print(iMaxSum([1,-5,9,-12,3,3,3,2])) # 2
print(iMaxSum([1,-5,9,7]))           # 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM