Решение
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() // Возвращаем максимальное количество полных строк
}