Sobes.tech
Назад к вопросам
Senior
4

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

Компании, где спрашивали
Velenes.Tech

Ответ от нейросети

sobes.tech AI

В представленном коде есть проблема: массив 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"].