簡體   English   中英

如何比 O(N^2) 更快地獲取給定數組的所有子數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM