Java 中的 ArrayList;同时交换和反转
ArrayList in Java; Swap and reverse at same time
有什么方法可以同时交换和反转吗?让我解释一下:
例如,如果我有十个整数:1 2 3 4 5 6 7 8 9 10,现在我想从 6 反转为 10,结果为:1 2 3 4 5 10 9 8 7 6,现在从 8 到 6,结果:1 2 3 4 5 10 9 6 7 8,一次又一次。
我尝试拆分成两个数组,反转一个然后连接两个:
List<Integer> listaFinal = new ArrayList<Integer>();
for (int i = 0; i < vueltasDar; i++) {
int b = 1;
int resta = intTortitas.length - intVueltas[b];
List<Integer> crawl_list1 = arrayTortitasList.subList(0, resta);
List<Integer> crawl_list2 = arrayTortitasList.subList(
resta + 1, intTortitas.length - 1);
Collections.reverse(crawl_list2);
listaFinal.addAll(crawl_list1);
listaFinal.addAll(crawl_list2);
b++;
}
但是没用。
非常感谢
更新:所以...最终代码。谢谢你。此代码允许输入以 -1 结尾的数字,在下一个输入中,您可以输入多个输入,然后输入反转数字。
输入示例:
5 4 3 2 1 -1
0
5 4 3 2 1 -1
2 3 2
5 4 3 2 1 -1
1 5
-1
0
输出示例:
1
2
5
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
public class pancake {
public static void main(String[] args) throws NumberFormatException,
IOException {
boolean corriendo = true;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (corriendo) {
String tortitas = br.readLine();
if (tortitas.equals("0")) {
corriendo = false;
break;
}
String vueltas = br.readLine();
String[] tortitasArray = tortitas.split(" ");
int[] intTortitas = new int[tortitasArray.length];
for (int i = 0; i < tortitasArray.length; i++) {
intTortitas[i] = Integer.parseInt(tortitasArray[i]);
}
String[] vueltasArray = vueltas.split(" ");
int[] intVueltas = new int[vueltasArray.length];
for (int i = 0; i < vueltasArray.length; i++) {
intVueltas[i] = Integer.parseInt(vueltasArray[i]);
}
int[] arrayTortitas = Arrays.copyOf(intTortitas,
intTortitas.length - 1);
int vueltasDar = intVueltas[0];
ArrayList<Integer> arrayTortitasList = new ArrayList<>();
for (int i = 0; i < intTortitas.length - 1; i++) {
arrayTortitasList.add(arrayTortitas[i]);
}
if (arrayTortitas.length > 0) {
for (int i = 1; i <= vueltasDar; i++) {
reverse(arrayTortitas,
arrayTortitas.length - intVueltas[i],
arrayTortitas.length - 1);
}
}
if (arrayTortitas.length < 1) {
break;
} else {
int resultado = arrayTortitas[arrayTortitas.length - 1];
System.out.println(resultado);
}
}
}
public static void reverse(int[] arrayTortitas, int a, int b) {
while (a < b) {
int temp = arrayTortitas[a];
arrayTortitas[a] = arrayTortitas[b];
arrayTortitas[b] = temp;
a++;
b--;
}
}
}
很简单:
public static void reverse(int[] array, int a, int b) { // both inclusive
while(a<b) {
int temp = array[a];
array[a] = array[b];
array[b] = temp;
a++;
b--;
}
}
有什么方法可以同时交换和反转吗?让我解释一下:
例如,如果我有十个整数:1 2 3 4 5 6 7 8 9 10,现在我想从 6 反转为 10,结果为:1 2 3 4 5 10 9 8 7 6,现在从 8 到 6,结果:1 2 3 4 5 10 9 6 7 8,一次又一次。
我尝试拆分成两个数组,反转一个然后连接两个:
List<Integer> listaFinal = new ArrayList<Integer>();
for (int i = 0; i < vueltasDar; i++) {
int b = 1;
int resta = intTortitas.length - intVueltas[b];
List<Integer> crawl_list1 = arrayTortitasList.subList(0, resta);
List<Integer> crawl_list2 = arrayTortitasList.subList(
resta + 1, intTortitas.length - 1);
Collections.reverse(crawl_list2);
listaFinal.addAll(crawl_list1);
listaFinal.addAll(crawl_list2);
b++;
}
但是没用。
非常感谢
更新:所以...最终代码。谢谢你。此代码允许输入以 -1 结尾的数字,在下一个输入中,您可以输入多个输入,然后输入反转数字。
输入示例:
5 4 3 2 1 -1
0
5 4 3 2 1 -1
2 3 2
5 4 3 2 1 -1
1 5
-1
0
输出示例:
1
2
5
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
public class pancake {
public static void main(String[] args) throws NumberFormatException,
IOException {
boolean corriendo = true;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (corriendo) {
String tortitas = br.readLine();
if (tortitas.equals("0")) {
corriendo = false;
break;
}
String vueltas = br.readLine();
String[] tortitasArray = tortitas.split(" ");
int[] intTortitas = new int[tortitasArray.length];
for (int i = 0; i < tortitasArray.length; i++) {
intTortitas[i] = Integer.parseInt(tortitasArray[i]);
}
String[] vueltasArray = vueltas.split(" ");
int[] intVueltas = new int[vueltasArray.length];
for (int i = 0; i < vueltasArray.length; i++) {
intVueltas[i] = Integer.parseInt(vueltasArray[i]);
}
int[] arrayTortitas = Arrays.copyOf(intTortitas,
intTortitas.length - 1);
int vueltasDar = intVueltas[0];
ArrayList<Integer> arrayTortitasList = new ArrayList<>();
for (int i = 0; i < intTortitas.length - 1; i++) {
arrayTortitasList.add(arrayTortitas[i]);
}
if (arrayTortitas.length > 0) {
for (int i = 1; i <= vueltasDar; i++) {
reverse(arrayTortitas,
arrayTortitas.length - intVueltas[i],
arrayTortitas.length - 1);
}
}
if (arrayTortitas.length < 1) {
break;
} else {
int resultado = arrayTortitas[arrayTortitas.length - 1];
System.out.println(resultado);
}
}
}
public static void reverse(int[] arrayTortitas, int a, int b) {
while (a < b) {
int temp = arrayTortitas[a];
arrayTortitas[a] = arrayTortitas[b];
arrayTortitas[b] = temp;
a++;
b--;
}
}
}
很简单:
public static void reverse(int[] array, int a, int b) { // both inclusive
while(a<b) {
int temp = array[a];
array[a] = array[b];
array[b] = temp;
a++;
b--;
}
}