// Дан массив неотрицательных чисел без повторяющихся элементов.

Скопируйте и отсортируйте числа, затем объедините последовательности, где соседние значения отличаются на единицу. Одиночные элементы выводятся без дефиса.

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

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

Скопируйте и отсортируйте числа, затем объедините последовательности, где соседние значения отличаются на единицу. Одиночные элементы выводятся без дефиса.

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

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

Условие

// Дан массив неотрицательных чисел без повторяющихся элементов. // Нужно его преобразовать в строку, сворачивая соседние по числовому ряду числа в диапазоны. // // Пример: [1, 4, 5, 2, 3, 9, 8, 11, 0, 13] -> "0-5,8-9,11,13"

func listToRanges(items []int) string { // TODO: implement this return "" }

Ответ

Скопируйте и отсортируйте числа, затем объедините последовательности, где соседние значения отличаются на единицу. Одиночные элементы выводятся без дефиса.

func listToRanges(items []int) string {
    values := append([]int(nil), items...)
    sort.Ints(values)
    parts := make([]string, 0)
    for i := 0; i < len(values); i++ {
        start, end := values[i], values[i]
        for i+1 < len(values) && values[i+1]-end == 1 {
            i++
            end = values[i]
        }
        if start == end {
            parts = append(parts, strconv.Itoa(start))
        } else {
            parts = append(parts, fmt.Sprintf("%d-%d", start, end))
        }
    }
    return strings.Join(parts, ",")
}

Импорты: sort, strconv, fmt, strings. В условии числа неотрицательные и без повторов; исходный массив не изменяется. Пустой ввод даёт пустую строку. Сложность O(n log n) из-за сортировки.

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

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

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

Подробнее