程式設計演算法題 乙個亂序陣列,找出和為0的最長子串

2021-08-19 15:27:26 字數 529 閱讀 2881

輸入乙個無序的陣列,要找到和為0的最長子串

列子:輸入:[3,0,-1,-2,-3,1,1,1,2,3,1,-2,-1]

輸出:9

1、暴力求解法

很容易想到,用兩個下標i,j來遍歷陣列,然後將i和j之間的元素求和,這樣的方法比較簡單,因為下標i和j都遍歷了陣列,所以時間複雜度有o(n^2),加上求和,所以總的時間複雜度是o(n^3),而空間儲存只需要保留i和j還有乙個最大長度的變數,所以空間複雜度為o(1)

2、動態規劃法一

上面方法耗時主要在求和,如果可以將部分求和的結果先儲存起來,則會省不少時間,可以考慮用乙個陣列a,a[i]儲存從下標0到i的所有元素的和,這個求和時間複雜度為o(n)。然後用兩個下標遍歷i,j。但是求i到j的和只需要a[j]-a[i],這樣時間複雜度只有o(n^2),空間複雜度為o(n),以空間換時間

3、動態規劃法二

參考:[筆試題]找陣列中最長和為0連續子串行、

同2方法先用陣列a存放元素和,然後因為如果i到j的子串行和為0,則a[i] == a[j],原理同方法2,複雜度類似

合併N個長度為L的有序陣列為乙個有序陣列

方案一 新建乙個n l的陣列,將原始陣列拼接存放在這個大陣列中,再呼叫arrays.sort 進行排序,或者使用其它排序方法即可。其實這個題與合併鍊錶很像,但是如果沒有指定每個陣列的長度,做起來就不太方便,所以一般的前提就是陣列長度是一致的 class solution int col array ...

Delphi洗牌演算法 將乙個陣列隨機亂序

用於考試時亂序,相同的試題,但每位考生看到的題序不同。布局 procedure tform1.formcreate sender tobject begin self.width 950 self.height 270 固定行列 stringgrid1.fixedcols 1 stringgrid1...

演算法 合併兩個有序數組成乙個有序陣列

最近看到乙個演算法題目,覺得很有意義,就自己查資料,摸索著自己實現了 特記錄一下。題目 有兩個陣列a和b,將它們合併成陣列c,需要c也是有序陣列。有兩種實現思路 1.定義乙個新陣列,長度為兩個陣列長度之和,將兩個陣列都copy到新陣列,然後排序。2.給兩個陣列分別定義乙個下標,最大長度是陣列長度減一...