Input: nums = [0,1,2,4,5,7]

В представленном коде есть проблема: массив nums не отсортирован, а алгоритм предполагает, что входные данные отсортированы для корректного определения последовательных диапазонов.

Короткий ответ

Что ответить на собеседовании

В представленном коде есть проблема: массив nums не отсортирован, а алгоритм предполагает, что входные данные отсортированы для корректного определения последовательных диапазонов.

Подробный разбор

Ответ с пояснениями

Условие

Input: nums = [0,1,2,4,5,7] Output: ["0->2","4->5","7"]

public class DemoApplication {

public static void main(String[] args) {
    int[] nums = {0,1,2,4,6,5,7,10};

    System.out.println(summary(nums));
}

public static List<String> summary(int[] nums){
    List<String> result = new ArrayList<>();
    int i = 0;
    int n = nums.length;

    while (i < n) {
        int start = nums[i];
        while (i + 1 < n && nums[i+1] == nums[i] + 1){
            i++;
        }
        int end = nums[i];
        if (start == end){
            result.add(String.valueOf(start));
        } else {
            result.add(start + "->" + end);
        }
        i++;
    }
    return result;
}

}

Ответ

В представленном коде есть проблема: массив nums не отсортирован, а алгоритм предполагает, что входные данные отсортированы для корректного определения последовательных диапазонов.

Чтобы исправить, нужно отсортировать массив перед обработкой:

import java.util.*;

public class DemoApplication {

    public static void main(String[] args) {
        int[] nums = {0,1,2,4,6,5,7,10};
        Arrays.sort(nums); // сортируем массив
        System.out.println(summary(nums));
    }

    public static List<String> summary(int[] nums){
        List<String> result = new ArrayList<>();
        int i = 0;
        int n = nums.length;

        while (i < n) {
            int start = nums[i];
            while (i + 1 < n && nums[i+1] == nums[i] + 1){
                i++;
            }
            int end = nums[i];
            if (start == end){
                result.add(String.valueOf(start));
            } else {
                result.add(start + "->" + end);
            }
            i++;
        }
        return result;
    }
}

После сортировки код корректно объединит последовательные числа в диапазоны, например, [0,1,2,4,5,6,7,10] превратится в ["0->2", "4->7", "10"].

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее