給定n個數和乙個target,輸出連續區間和為target的所有區間
寫**的時候遇到的問題
儲存區間內元素和,區間變化加減操作即可,而不是每次對區間求和,這樣時間複雜度就是o(n)了,否則是o(n^2),因為還要遍歷區間內部元素
如果初始化元素和為0,樣例,arr = [4] ,target = 4,應該返回[0,0],出錯。因此,初始化為陣列第乙個元素
j迴圈向後加時,防止越界;當區間和等於target,再向後遍歷,可以i+或j+,但是j+可能會越界,因此選擇i+
最外面的while條件,i <= j and 這個條件不需要,如果加上,[3,1,2,5,7,10],target=1 出錯
參考:
def
findsum
(arr, target)
: i,j =0,
0 ans =
tempsum = arr[0]
while j <
len(arr)
:while j <
len(arr)-1
and tempsum < target:
j +=
1 tempsum += arr[j]
if tempsum == target:
[i,j]
) tempsum -= arr[i]
i +=
1elif tempsum > target:
tempsum -= arr[i]
i +=
1return ans
if __name__ ==
"__main__"
: arr =[1
,1,2
,2,1
,1,3
,4,5
] target =
4print
(findsum(arr,target)
)
返回等於目標值的數
給出乙個整數陣列,請在陣列中找出兩個加起來等於目標值的數,你給出的函式twosum 需要返回這兩個數字的下標 index1,index2 需要滿足 index1 小於index2.注意 下標是從1開始的 假設給出的陣列中只存在唯一解 例如 給出的陣列為 目標值為90 輸出 index1 1,inde...
python解決兩個數之和等於給定目標值問題
def twosum1 nums,target res newnums nums 深拷貝原陣列到新陣列 newnums.sort 排序 left 0 左指標 right len nums 1 右指標 while left right if newnums left newnums right tar...
子集和的目標值
題目描述 給定n個整數和目標值t,求某一非空子集使子集的元素的和與目標值之差的絕對值最小,元素可重複。輸入描述 第一行為整數n t。n為整數個數,t為目標值 第二行為n個整數ai。輸出描述 乙個整數,為差的最小值的絕對值。樣例輸入 5 91 1 1 4 17 樣例輸出 2 資料範圍及提示 1 n 1...