在 Java 中检查子数组是否由给定数组中的连续整数组成
javaserver side programmingprogramming
在 Java 中,数组是一个对象。它是一种非原始数据类型,用于存储类似数据类型的值。
根据问题陈述,我们必须检查子数组是否由给定整数数组中的连续整数组成。子数组指的是数组中的某个部分。这里已经告诉检查由连续整数元素形成的子数组,即数组元素是一组连续的数字,我们可以一个接一个地获取元素。
让我们探索这篇文章,看看如何使用 Java 编程语言来实现它。
向您展示一些实例
实例-1
假设原始数组为 {8, 0, 2, 4, 1, 3, 1, 9, 5, 11} 找到子数组后,结果将是: 最大的子数组来自索引 [1, 5] 子数组的元素为:0 2 4 1 3
实例-2
假设原始数组为 {9, 7, 3, 2, 0, 2, 18, 0} 找到子数组后,结果将是: 最大的子数组来自索引 [2, 3] 子数组的元素为:3 2
实例-3
假设原始数组为 {0, 2, 1, 3, 5, 4, 5, 11} 找到子数组后,结果将是: 最大的子数组来自索引 [0, 5] 子数组的元素为:0 2 1 3 5 4
算法
步骤 1 - 声明并初始化一个整数数组。
步骤 2 - For 循环表示子数组的开始和结束数组。
步骤 3 - 现在检查子数组是否连续。
步骤 4 - 打印子数组的元素。
语法
要获取数组的长度(该数组中的元素数),数组有一个内置属性,即长度
下面引用它的语法 -
数组。长度
其中,"array" 指的是数组引用。
多种方法
我们提供了不同方法的解决方案。
通过使用数组的静态初始化
通过使用用户定义的方法
让我们逐一查看程序及其输出。
方法 1:通过使用数组的静态初始化
在这种方法中,数组元素将在程序中初始化。然后根据算法检查子数组是否由给定整数数组中的连续整数组成。
示例
import java.lang.*; public class Main { public static void main (String[] args) { int[] A = { 0, 12, 14, 13, 45, 41, 5, 11 }; int len = 1; int start = 0, end = 0; for (int i = 0; i < A.length - 1; i++) { int min_val = A[i], max_val = A[i]; for (int j = i + 1; j < A.length; j++) { min_val = Math.min(min_val, A[j]); max_val = Math.max(max_val, A[j]); if (isConsecutive(A, i, j, min_val, max_val)) { if (len < max_val - min_val + 1) { len = max_val - min_val + 1; start = i; end = j; } } } } System.out.println("The largest subarray is from index ["+start + "," + end + "]"); System.out.print("The elements of subarray are: "); for (int x = start; x <= end; x++) { System.out.print(A[x]+" "); } } private static boolean isConsecutive(int[] A, int i, int j, int min, int max) { if (max - min != j - i) { return false; } boolean visited[] = new boolean[j - i + 1]; for (int k = i; k <= j; k++) { if (visited[A[k] - min]) { return false; } visited[A[k] - min] = true; } return true; } }
输出
最大的子数组来自索引 [1,3] 子数组的元素为:12 14 13
示例
import java.lang.*; public class Main { public static void main (String[] args) { int[] A = { 9, 4, 3, 1, 0, 2, 18, 0 }; findMaxSubarray(A); } public static void findMaxSubarray(int[] A) { int len = 1; int start = 0, end = 0; for (int i = 0; i < A.length - 1; i++) { int min_val = A[i], max_val = A[i]; for (int j = i + 1; j < A.length; j++) { min_val = Math.min(min_val, A[j]); max_val = Math.max(max_val, A[j]); if (isConsecutive(A, i, j, min_val, max_val)) { if (len < max_val - min_val + 1) { len = max_val - min_val + 1; start = i; end = j; } } } } System.out.println("The largest subarray is from index [" +start + "," + end + "]"); System.out.print("The elements of subarray are: "); for (int x = start; x <= end; x++) { System.out.print(A[x]+" "); } } private static boolean isConsecutive(int[] A, int i, int j, int min, int max) { if (max - min != j - i) { return false; } boolean visited[] = new boolean[j - i + 1]; for (int k = i; k <= j; k++) { if (visited[A[k] - min]) { return false; } visited[A[k] - min] = true; } return true; } }
输出
最大的子数组来自索引 [1,5] 子数组的元素为:4 3 1 0 2
在本文中,我们探索了使用 Java 编程语言检查子数组是否由给定数组中的连续整数组成的不同方法。