如何检查列表中任何N个项目的总和是否等于或大于Kotlin中的值

时间:2019-05-30 09:04:19

标签: list kotlin

是否可以检查列表中n个项目的任意组合是否大于或等于一个数字?以及如何?

2 个答案:

答案 0 :(得分:2)

我要做的是:

  1. 按降序排列列表
  2. 检查前N个项目的总和是否> =目标。如果那不是真的,那么其他任何组合肯定不会成为> =目标。

一个例子是:

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 :(得分:1)

您可能应该尝试以下方法:

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

在这种情况下,它将以升序排序的N个元素,将其求和并与您所需的数字进行比较。

干杯!