Программа Java для разделения массива из указанной позиции

Опубликовано: 4 Февраля, 2022

Учитывая массив размера N , наша задача состоит в том, чтобы разбить массив в определенной позиции, указанной пользователем. Также обсудим пограничные случаи.

Рассмотрим следующий пример.

Из приведенного выше примера пусть A будет исходным массивом, который мы хотим разбить. Пусть N будет длиной массива A (N = 10) и пусть pos будет позицией, которую мы хотим разделить. В приведенном выше примере pos = 5 . Все элементы перед этой позицией, т.е. из индекса 0-4 будут разделены на один массив, а элементы из индекса 5-10 разделены на более позднюю часть, помеченную как B и C соответственно. Но если позиция равна 0 или больше N, то он не может разбить массив, и отображается сообщение о недопустимой позиции.

Примеры:

 Input: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

           pos =  5

Output:  B[] = { 1, 2, 3, 4, 5}

             C[] = { 6,7,8,9,0}

Input: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

         pos = -1

Output:  Invalid position 

Input: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}



        pos = 20

Output:  Invalid position

Метод 1. В первом методе мы будем использовать два цикла for. Это довольно простой метод.

  • Шаг 1: сначала мы принимаем значение pos от пользователя
  • Шаг 2: мы объявляем два массива B и C, имеющих размер pos и N - pos соответственно.
  • Шаг 3: Затем у нас есть два цикла: первый цикл запускается с 0 - позиция инициализирующего массива B, а второй цикл - от 0 до N - инициализирующего массива C.

Мы также добавили вспомогательный метод pprint (), который принимает массив и печатает его. У нас также есть оператор if, проверяющий допустимое значение pos.

Example:

Java

import java.util.*;
 
public class SplittingArray1 {
 
    // this method accepts a array and prints the value
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        // original array
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        // size of array
        int n = a.length;
 
        // accepting the value of position from the user
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        // validating the position for invalid values.
        if (pos > 0 && pos < n) {
            // method  1 : using two for loops
 
            // declaring array B and C
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // initializing array B
            for (int i = 0; i < pos; i++) {
                b[i] = a[i];
            }
 
            // initializing array C
            for (int i = 0; i < n - pos; i++) {
                c[i] = a[i + pos];
            }
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}


Выход
 Введите позицию для разделения.
Неверная позиция.

Метод 2: В этом методе вместо использования двух циклов for мы пытаемся реализовать одну и ту же программу, используя только один.

  • Шаг 1 и Шаг 2 аналогичны методу 1
  • Шаг 3: запускаем цикл for от 0 до N - 1
 если index <pos 
   инициализируем массив B 
 иначе, если pos> index 
   инициализируем массив C

Пример:

 

Java

import java.util.Arrays;
import java.util.Scanner;
 
public class SplittingArray2 {
 
    // this method accepts a array and prints the value
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
 
        // original array A
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        int n = a.length;
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        if (pos > 0 && pos < n) {
            // method  2 : using only one forloop
 
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // only using one for loop to solve the problem.
            for (int i = 0; i < n; i++) {
 
                if (i < pos)
                    b[i] = a[i];
                else
                    c[i - pos] = a[i];
            }
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}


Выход
 Введите позицию для разделения.
Неверная позиция.

Способ 3:

Это самый короткий способ. В этом методе мы используем встроенный метод Arrays.copyOfRange () .

public static short[] copyOfRange(short[] original, int from, int to)

   original − This is the array from which a range is to to be copied.

   from − This is the initial index of the range to be copied, inclusive.

   to − This is the final index of the range to be copied, exclusive.

Пример:

 

Java

import java.util.Arrays;
import java.util.Scanner;
 
public class SplittingArray3 {
 
    static void pprint(int arr[])
    {
        for (int var : arr) {
            System.out.print(var + " ");
        }
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
 
        int n = a.length;
 
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Enter position to split.");
 
        int pos = scanner.nextInt();
 
        if (pos > 0 && pos < n) {
 
            // method  3 : using  Arrays.copyOfRange()
 
            int b[] = new int[pos];
            int c[] = new int[n - pos];
 
            // initializing array B by copying values from
            // index 0  to pos - 1
            b = Arrays.copyOfRange(a, 0, pos);
 
            // initializing array B by copying values from
            // index pos  to n - 1
            c = Arrays.copyOfRange(a, pos, n);
 
            // printing the array b and c
 
            pprint(b);
            pprint(c);
        }
 
        else {
            System.out.println("Invalid position.");
        }
    }
}


Выход
 Введите позицию для разделения.
Неверная позиция.

Сложность времени: O (n)

Космическая сложность: O (n)

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .