Помогите пожалуйста разобраться с алгоритмом
public List<String> getLargestCombinationNumbers(String way) {
List<String> list = getListStringFromFile(way);
List<String> list3 = new LinkedList<>();
for (String text : list) {
ArrayList<Integer> list2 = new ArrayList<>();
List<String> list1 = new LinkedList<>();
Arrays.stream(text.split(" "))
.forEach((String item) -> list2.add(Integer.parseInt(item)));
int count = 1;
int pozStart = 0;
int pozEnd = 0;
int count1 = 0;
for (int i = 0; i < list2.size() - 1; i++) {
if (list2.get(i) < list2.get(i + 1)) {
count++;
list1.add(String.valueOf(list2.get(i)));
list1.add(String.valueOf(list2.get(i + 1)));
} else {
list3 = list1;
list1 = new ArrayList<>();
pozStart = i + 1;
}
if (count1 <= count) {
pozEnd = i + 1;
list1.remove(String.valueOf(list2.get(i)));
System.out.println(list1);
count1 = count;
count = 0;
} else {
pozEnd = i + 1;
}
}
}
return list3;
}
- Реализовать метод, который принимает путь к файлу.
- Метод возвращает список наибольшей комбинации цифр для каждой строки,
- которые идут в порядке возрастания.
- Например:
- Input:
- 1 2 1 2 3
- 67 68 69 23
- Output:
- "1 2 3", "67 68 69"
Ответы (1 шт):
Непонятно зачем вам столько листов разных калибров и условных операторов. По сути вам нужен один интервал. А это 2 переменные, которые сохранят индексы начала и окончания этого интервала в исходном массиве. А дальше нужен единственный буфер (в роли которой может выступить одна коллекция), который в ходе итерации будет накапливать возрастающую последовательность цифр и очищаться, когда эта последовательность закончится. Для одной последовательности нужен один буфер и ее индексы, больше ничего. А поскольку от буфера нам нужен только его размер для определения индексов, ведь все значения и так есть в исходном массиве, то буфер в виде коллекции лекго заменить на обычный счетчик(в данном коде это переменная currentLength). Звучит логично:
public static void main(String[] args) {
System.out.println(getLargestCombinationNumbers("1 2 1 2 3"));
System.out.println(getLargestCombinationNumbers("67 68 69 23"));
}
public static String getLargestCombinationNumbers(String textLine) {
int startIndex = 0, endIndex = 0, currentLength = 0;
String[] numbers = textLine.split(" ");
for (int i = 1; i < numbers.length; i++) {
if (Integer.valueOf(numbers[i]) > Integer.valueOf(numbers[i - 1])) currentLength++;
else if (currentLength >= (endIndex - startIndex)) {
endIndex = i;
startIndex = i - currentLength - 1;
currentLength = 0;
}
}
if (currentLength >= (endIndex - startIndex)) {
endIndex = numbers.length;
startIndex = numbers.length - currentLength - 1;
}
return String.join(" ", Arrays.copyOfRange(numbers, startIndex, endIndex));
}
С путем к файлу решайте сами, потому как я понять не могу, какова его роль в данной задаче