Как я могу проверить, равна ли сумма любых N номеров элементов в списке или больше, чем значение в Kotlin - PullRequest
0 голосов
/ 30 мая 2019

Можно ли проверить, является ли любая комбинация из n номеров Предметов в списке больше или равна числу?и как?

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Что бы я сделал:

  1. Сортировка списка по убыванию
  2. Проверьте, равна ли сумма первых 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 элементов

1 голос
/ 30 мая 2019

Возможно, вам стоит попробовать это:

private fun hasLargerSum(compareTo: Int, n: Int, list: List<Int>): Boolean =
        list.sorted()
            .takeLast(n)
            .sum() >= compareTo

в этом случае он возьмет N элементов списка, отсортированных по возрастанию, суммирует их и сравнивает с нужным числом.

ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...