Программа Java для разделения массива из указанной позиции
Учитывая массив размера 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 и многому другому, см. Полный курс подготовки к собеседованию .