#java #algorithm #data-structures #deque
Вопрос:
Есть ли лучший способ выполнить переход от первого к последнему в массиве, когда последний может быть меньше первого, в Java? Это то, что я в настоящее время использую в своей реализации deque:
public void printDeque() {
int start = nextFirst 1, end = nextLast - 1;
if (start >= end) {
for (int i = start; i < list.length; i ) {
System.out.print(list[i] " ");
}
for (int i = 0; i <= end; i ) {
System.out.print(list[i] " ");
}
} else {
for (int i = start; i <= end; i ) {
System.out.print(list[i] " ");
}
}
System.out.println();
}
Ответ №1:
Я бы посоветовал вам создать ArrayList
экземпляр, добавить каждый элемент от nextFirst
до nextLast
(по модулю размера) и отобразить полученный список :
import java.util.*;
public class HelloWorld {
static String[] array = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"};
public static void deque(int nextFirst, int nextLast) {
nextFirst %= array.length; // Simple security measure
nextLast %= array.length; // Simple security measure
int id = nextFirst;
if (nextLast < nextFirst)
nextLast = array.length;
ArrayList<String> list = new ArrayList<>();
while (id <= nextLast)
list.add(array[id % array.length]);
String[] result = list.toArray(new String[list.size()]);
System.out.println(String.join(" ", result));
}
public static void main(String... args) {
deque(7, 2);
}
}
Ответ №2:
Я понял, что во время обхода lastIndex не имеет значения, поскольку объекты размещаются последовательно, поэтому мы можем начать с первой позиции и продолжать, пока не столкнемся с нулем.
Затем мы можем начать с 0 и продолжать до тех пор, пока не получим ноль, оставаясь меньше первой позиции. Этот случай возникает только тогда, когда первый > последний.
Вот код:
private int getFirstIndex() {
int first = nextFirst 1;
if (first == items.length) {
first = 0;
}
return first;
}
public void printDeque() {
int firstIndex = getFirstIndex()
for (int i = firstIndex; i < items.length amp;amp; items[i] != null; i ) {
System.out.print(items[i] " ");
}
for (int i = 0; i < firstIndex amp;amp; items[i] != null; i ) {
System.out.print(items[i] " ");
}
System.out.println();
}