https://leetcode.com/problems/minimum-absolute-difference/ Easy

Решение

fun minimumAbsDifference(arr: IntArray): List<List<Int>> {
    // Находим минимальный и максимальный элементы массива
    var minValue = Int.MAX_VALUE
    var maxValue = Int.MIN_VALUE
    for (num in arr) {
        if (num < minValue) minValue = num
        if (num > maxValue) maxValue = num
    }

    // Создаем булевый массив для хранения присутствующих чисел
    val exists = BooleanArray(maxValue - minValue + 1)
    for (num in arr) {
        exists[num - minValue] = true
    }

    var minDiff = Int.MAX_VALUE
    val result = mutableListOf<List<Int>>()
    var prev = -1

    // Проходим по булевому массиву, находя минимальную разницу
    for (i in exists.indices) {
        if (exists[i]) {
            if (prev != -1) {
                val diff = i - prev
                if (diff < minDiff) {
                    minDiff = diff
                    result.clear()
                }
                if (diff == minDiff) {
                    result.add(listOf(prev + minValue, i + minValue))
                }
            }
            prev = i
        }
    }
    return result
}