https://leetcode.com/problems/arranging-coins Easy

Решение

fun arrangeCoins(n: Int): Int {
    var left = 0L
    var right = n.toLong()

    // Используем бинарный поиск для поиска максимального количества полных строк
    while (left <= right) {
        val mid = left + (right - left) / 2
        val coinsNeeded = mid * (mid + 1) / 2  // Количество монет, необходимых для mid строк

        when {
            coinsNeeded == n.toLong() -> return mid.toInt()  // Найдено точное количество строк
            coinsNeeded < n -> left = mid + 1  // Ищем в правой половине
            else -> right = mid - 1  // Ищем в левой половине
        }
    }

    return right.toInt()  // Возвращаем максимальное количество полных строк
}