[英]How can I get all subarrays of a given array faster than O(N^2)?
我正在嘗試打印給定數組的所有子數組,如下所示。
given array : [5,3,2,4,1]
subarray : [
[5],
[5,3],
[5,3,2],
[5,3,2,4],
[5,3,2,4,1],
[3],
[3,2],
[3,2,4],
[3,2,4,1],
[2],
[2,4],
[2,4,1],
[4],
[4,1],
[1]
]
我可以用嵌套循環打印它。
但我想知道如何用O(N)
或O(2^N)
來實現它。
首先有一個數組的 O(n^2) 個子數組。
打印它們——無論你如何生成它們——總是至少需要 O(n^2); 你總是打印至少 O(n^2) 行,每行至少需要 O(1)。
最后,由於任何 O(n^2) 也是 O(2^n),您已經有了一個可以在 O(2^n) 中運行的算法。
不可能在小於 O(N^2) 的時間內訪問每個元素,因為您需要訪問每個元素才能打印它。 您可以考慮展平陣列,然后打印陣列只會是 O(N),因為現在它只是一個陣列。 然而,這種扁平化將花費大於 O(N) 的時間。
您最好的選擇是使用雙 for 循環實現
for(List<T> i : itemArray) {
for(T j : i) {
System.out.println(j);
}
}
沿着這些線打印出你的子數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.