求連續子陣列和等於給定目標值的區間 面試題

2021-09-24 21:35:17 字數 993 閱讀 3512

給定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...