演算法記錄:
給定乙個陣列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...