Помогите пожалуйста разобраться с алгоритмом

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)); 
}

С путем к файлу решайте сами, потому как я понять не могу, какова его роль в данной задаче

→ Ссылка