找出陣列中求和等於y的所有子陣列

2022-03-20 17:13:01 字數 810 閱讀 8475

演算法記錄:

給定乙個陣列x,每個元素都是正整數,找出其中滿足條件「求和等於y」的所有子陣列。(簡化問題,每個元素都不相等)

x=[x1,...,xn],暴力搜尋,複雜度o(2^n),不可取。

動態規劃思路。構建矩陣a:

演算法實現如下,下面的演算法只找出了乙個子陣列,稍作修改可以找出所有子陣列。

矩陣a非常稀疏,可以通過優化的資料結構減少開銷。

import numpy as np

x = [1,2,3,4]

n = len(x)

m = sum(x) + 1

a = (np.ones(m * n)*-1).reshape(m, n)

## 計算矩陣a

i = 0

a[x[i], i] = i

for i in range(1, n):

for j in range(m):

if a[j, i - 1] != -1 and j + x[i] < m:

a[j + x[i], i] = i

a[x[i] , i] = i

print(a)

y=4## 尋找子陣列

res =

while y > 0:

idss = (a[y]>=0)

if idss.any():

idss = a[y, idss]

ids = int(idss[0])

y = int(y - x[ids])

else:

break

print(res)

自然數序列,找出任意連續之和等於n的所有子串行

lst 0,2,4,5,3,1,8,6,4,7,9,3,2 total sum 9 def sum seq lst seq ct 0 for x in lst ct x if ct total sum print seq continue if ct total sum continue if ct...

找出陣列中所有重複的數

include stdafx.h for i 0 to n 1 while a a i a i swap a i a a i end while end for for i 0 to n 1 if a i i then print a i end if end for void swap int a...

找出字串陣列中的等於某字串的所有索引位置

最近一直再用linq,所以這個問題想先用linq實現,再用一般的方法實現。enumerable的range方法有兩個引數,第乙個是資料序列的開始大小int start,第二個是資料序列的長度int count string strtemp new string const string temp p...