Dada una array de tamaño N , nuestro trabajo es dividir la array en una posición específica especificada por el usuario. También se discutirán los casos límite.
Considere el siguiente ejemplo.
Del ejemplo anterior, sea A la array original que queremos dividir. Sea N la longitud de la array A (N = 10) y sea pos la posición que queremos dividir. En el ejemplo anterior pos = 5 . Todos los elementos antes de esta posición, es decir; del índice 0 al 4 se dividirá en una array, mientras que los elementos del índice 5 al 10 se dividirán en la última parte, etiquetada como B y C respectivamente. Pero si la posición es 0 o mayor que N , entonces no se puede dividir la array y se muestra el mensaje de posición no válida.
Ejemplos:
Entrada : A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
posición = 5
Salida : B[] = { 1, 2, 3, 4, 5}
C[] = { 6,7,8,9,0}
Entrada: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
posición = -1
Salida: posición no válida
Entrada: A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
posición = 20
Salida: posición no válida
Método 1: en el primer método, usaremos dos bucles for. Este enfoque es un método bastante sencillo.
- Paso 1: primero aceptamos el valor de pos del usuario
- Paso 2: declaramos dos arreglos B y C que tienen tamaño pos y N – pos respectivamente.
- Paso 3: Luego tenemos dos bucles, el primer bucle se ejecuta desde 0 – pos inicializando la array B , mientras que el segundo ciclo se ejecuta desde 0 a N – pos inicializando la array C.
También hemos agregado un método auxiliar pprint() que acepta una array y la imprime. También tenemos una instrucción if que verifica el valor pos válido.
Ejemplo:
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."); } } }
Enter position to split. Invalid position.
Método 2: en este método, en lugar de usar dos bucles for, intentamos implementar el mismo programa usando solo uno.
- Los pasos 1 y 2 son similares al método 1
- Paso 3: ejecutamos un ciclo for de 0 a N – 1
if index < pos we initialize array B else if pos >index we initialize array C
Ejemplo:
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."); } } }
Enter position to split. Invalid position.
Método 3:
Este es el método más corto. En este método, usamos el método incorporado Arrays.copyOfRange() .
public static short[] copyOfRange(short[] original, int from, int to)
original : esta es la array desde la cual se copiará un rango.
from : este es el índice inicial del rango que se va a copiar, inclusive.
to − Este es el índice final del rango a copiar, exclusivo.
Ejemplo:
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."); } } }
Enter position to split. Invalid position.
Complejidad de tiempo: O(n)
Complejidad espacial: O(n)
Publicación traducida automáticamente
Artículo escrito por clivefernandes777 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA