演算法32--求出給定陣列中某一段連續區間之和為某值的起始索引
阿新 • • 發佈:2018-11-25
給定一個數組以及一個目標數,求陣列中一段連續的區間使得該區間元素之和為目標數。
例如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