Что бы я сделал:
- Сортировка списка по убыванию
- Проверьте, равна ли сумма первых N элементов> = target.Если это не так, то любая другая комбинация не будет> = целевой точно.
Пример:
val numbers = listOf(5, 2, 8, 12, 4, 9, 0)
val target = 29
val n = 3
val result = numbers.sortedDescending().take(n).sum() >= target
println(result) // true if target is <= 29, false otherwise
Обратите внимание, что этот подход требует O(n * log(n))
,т.е. самая медленная операция - сортировка.Кроме того, этот подход будет работать, даже если numbers
содержит менее n
элементов