在 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 编程语言检查子数组是否由给定数组中的连续整数组成的不同方法。


相关文章