Назад к вопросам
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"].