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编程语言来找到给定数组的所有子数组。