在 Java 中查找给定数组的所有子数组

javaobject oriented programmingprogramming更新于 2024/11/19 18:52:17

数组是一种线性数据结构,其中元素存储在连续的内存位置中。

根据问题陈述,我们必须找到给定数组的所有子数组。子数组是数组的一部分或一段。当我们谈论数组的所有子数组时,我们谈论的是使用数组的所有元素(不重复)可以进行的组合总数。

让我们探索这篇文章,看看如何使用 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 到结束 +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) {
      
        // 数组元素
        int arr[] = { 10, 2, 3, 99, 12, 0 };
        System.out.println("子数组是-");
        
        // For 循环获取起始索引
        for (int i = 0; i < arr.length; i++)
        
        // For 循环获取结束索引
        for (int j = i; j < arr.length; j++) {
        
        // For 循环打印子数组元素
         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 方法
   public static void main(String[] args) {
      // 数组元素
      int arr[] = { 10, 2, 3};
      System.out.println("The subarrays are-");
         
      // 调用递归函数
      printSubArrays(arr, 0, 0);
   }
   
   // 递归函数查找所有子数组
   static void printSubArrays(int[] arr, int head, int tail) {
   
        // 如果到达末尾,则退出函数
        if (tail == arr.length)
        return;
        
        // 增加第一个索引并调用自身
        else if (head > tail)
        printSubArrays(arr, 0, tail + 1);
        
        // 打印子数组,然后增加第一个元素索引
        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 编程语言查找给定数组的所有子数组。


相关文章


有用资源