在Java中查詢給定陣列的所有子陣列


一個陣列是一種線性資料結構,其中元素儲存在連續的記憶體位置。

根據問題陳述,我們必須找到給定陣列的所有子陣列。子陣列是陣列的一部分或一段。當我們談論陣列的所有子陣列時,我們指的是可以使用陣列的所有元素進行組合的總數,而無需重複。

讓我們探索本文,瞭解如何使用Java程式語言來完成此操作。

為您展示一些例項

例項 1

假設我們有以下陣列

[10, 2, 3, -5, 99, 12, 0, -1]

此陣列的子陣列將是

10
10 2
10 2 3
10 2 3 -5
10 2 3 -5 99
10 2 3 -5 99 12
10 2 3 -5 99 12 0
10 2 3 -5 99 12 0 -1
2
2 3
2 3 -5
2 3 -5 99
2 3 -5 99 12
2 3 -5 99 12 0
2 3 -5 99 12 0 -1
3
3 -5
3 -5 99
3 -5 99 12
3 -5 99 12 0
3 -5 99 12 0 -1
-5
-5 99
-5 99 12
-5 99 12 0
-5 99 12 0 -1
99
99 12
99 12 0
99 12 0 -1
12
12 0
12 0 -1
0
0 -1
-1

例項 2

假設我們有以下陣列

[55,10,29,74]

此陣列的子陣列將是

55
55 10
55 10 29
55 10 29 74
10
10 29
10 29 74
29
29 74
74

演算法

演算法 1

  • 步驟 1 - 儲存陣列後,執行一個從 0 到 n 的 for 迴圈。這將標記我們主陣列的起始點。

  • 步驟 2 - 執行另一個 for 迴圈,該迴圈從第一個迭代器執行到主陣列的結束點。

  • 步驟 3 - 現在執行另一個迴圈,遍歷這兩個迭代器之間的元素。

  • 步驟 4 - 按順序列印元素。

演算法 2

  • 步驟 1 - 儲存陣列後,檢查我們是否已到達末尾,然後退出函式。

  • 步驟 2 - 如果起始索引大於結束索引,則從 0 到 end+1 自行呼叫函式。

  • 步驟 3 - 否則,在 for 迴圈內列印索引之間的陣列元素,然後從 start+1 到 end 再次呼叫函式。

  • 步驟 4 - 退出。

語法

要獲取陣列的長度(該陣列中的元素數量),陣列有一個內建屬性,即length

下面指的是它的語法:

array.length

其中,“array”指的是陣列引用。

您可以使用 Arrays.sort() 方法將陣列按升序排序。

Arrays.sort(array_name);

多種方法

我們以不同的方法提供瞭解決方案。

  • 使用 for 迴圈

  • 使用遞迴

讓我們一一檢視程式及其輸出。

方法 1:使用 for 迴圈

在這種方法中,我們將使用三個 for 迴圈來查詢陣列的子陣列。第一個迴圈標記開始,第二個迴圈標記子陣列的結束,而第三個迴圈列印子陣列。

示例

import java.io.*;
public class Main {
   public static void main(String[] args) {
      
      // The array elements
      int arr[] = { 10, 2, 3, 99, 12, 0 };
      System.out.println("The subarrays are-");
      
      // For loop for start index
      for (int i = 0; i < arr.length; i++)
      
      // For loop for end index
      for (int j = i; j < arr.length; j++) {
      
         // For loop to print subarray elements
         for (int k = i; k <=j; k++)
            System.out.print(arr[k] + " ");
            System.out.println("");
      }
   }
}

輸出

The subarrays are-
10 
10 2 
10 2 3 
10 2 3 99 
10 2 3 99 12 
10 2 3 99 12 0 
2 
2 3 
2 3 99 
2 3 99 12 
2 3 99 12 0 
3 3 99 3 99 12 3 99 12 0 
99 
99 12 
99 12 0 
12 12 0 
0 

方法 2:使用遞迴

在這種方法中,我們使用遞迴查詢所有子陣列。

示例

import java.io.*;
public class Main {
   //main method
   public static void main(String[] args) {
      // The array elements
      int arr[] = { 10, 2, 3};
      System.out.println("The subarrays are-");
         
      // Calling the recursive function
      printSubArrays(arr, 0, 0);
   }
   
   // Recursive FUnction to Find all the subarrays
   static void printSubArrays(int[] arr, int head, int tail) {
   
      // Exits the function if we have reached the end
      if (tail == arr.length)
         return;
      
      // Increases the first index and calls itself
      else if (head > tail)
         printSubArrays(arr, 0, tail + 1);
      
      // Print the subarray and then increases the first element index
      else {
         for (int i = head; i < tail; i++)
            System.out.print(arr[i] + " ");
         System.out.println(arr[tail]);
         printSubArrays(arr, head + 1, tail);
      }
      return;
   }
}

輸出

The subarrays are-
10
10 2
2
10 2 3
2 3
3

在本文中,我們探討了如何使用 Java 程式語言查詢給定陣列的所有子陣列。

更新於:2023 年 10 月 22 日

46K+ 次檢視

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.