1. 程式人生 > >演算法32--求出給定陣列中某一段連續區間之和為某值的起始索引

演算法32--求出給定陣列中某一段連續區間之和為某值的起始索引

給定一個數組以及一個目標數,求陣列中一段連續的區間使得該區間元素之和為目標數。

例如num=[1,2,3,4,5] target=10  結果返回[0,3]

解法一:遍歷所有情況  時間複雜度N2

def getSumIndex2(num=[1,2,3,4,5,6,7,8,9], target=30):
    for i in range(len(num)):
        sum = 0
        for j in range(i, len(num)):
            sum += num[j]
            if sum==target:
                print(i, j)
                return i, j
    return -1, -1

解法二:利用雙指標i,j來維護一段連續區間,記錄該區間的和sum:

如果sum==target  則返回i,j即可

如果sum<target,j++,更新sum

如果sum>target,i++,更新sum

def getSumIndex(num=[1,2,3,4,5,6,7,8,9], target=30):
    i = 0
    j = i
    sum = 0
    while j<len(num) and i<=j:
        if sum==target:
            return i, j-1
        while sum<target:
            sum += num[j]
            j += 1
        while sum>target:
            sum -= num[i]
            i += 1
    return -1, -1