- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 Scala 中做题,这是任务语句的摘要:
There is a list of integers (of length N, 0 < N < 10^5) and another integer S (0 < S < 10^15). You are required to find the minimal size of the minimal subset of the given list of which the sum of elements (in the subset) is greater than or equal to S.
Input is given as below:
4
4 12 8 10
4
4 13 30 100Output for above example:
1
2
3
-1First line is length of array, the second is the array of integers (0 < A[i] < 10^9), the third is the number of test cases (0 < T < 10^5) and the fourth contains the S (for each test case).
这是我尝试过的:选择的元素无关紧要。所以我首先对给定整数列表进行排序。然后我选择第一个检查它是否大于 S。如果不是,我也选择第二个元素,依此类推,直到总和大于或等于 S。
这个算法有效,我得到了许多正确的测试用例。但是我遇到了一些 Time Limit Exceeded。如果您能指出我如何才能使它更快或者是否有更好的方法来做到这一点,我们将不胜感激。
我的代码(Scala):
object Solution {
def main(args: Array[String]) {
val n = readInt()
val arr: Array[Long] = readLine().split(" ").map(_.toLong).sortWith(_ > _)
val sums: Array[BigInt] = new Array(n)
sums(0) = arr(0)
for(i <- 1 until n) sums(i) = sums(i-1) + arr(i)
val t = readInt()
for(i <- 1 to t) {
val s:BigInt = BigInt(readLong())
if(sums(n-1) < s)
println(-1)
else {
var i = 0
while(sums(i) < s) i += 1
println(i + 1)
}
}
}
}
最佳答案
制作一个完整的总和列表是不必要的,无论如何使用 BigInt
都是浪费——一个 Long
最多可以容纳 9.2e18,而你保证只有 1e15即将出现。 (事实上 ,我认为选择 1e15 是为了即使 Double
也可以在不损失精度的情况下保留答案。)
此外,您可以对基元使用快速排序,而不是像 _ > _
这样的慢速通用排序,后者最终将整数装箱。所以:
val arr = {
val in = readLine().split(' ').map(_.toInt)
java.util.Arrays.sort(in)
in
}
然后,使用累加器(Long
即可):
var sum = 0L
并用 while 循环搜索答案,记住最大的元素在最后,所以你想从最后开始:
var i = arr.length-1
while (i >= 0 && sum < t) {
sum += arr(i)
i -= 1
}
现在你只需要在用完元素之前检查你是成功还是失败:
val answer = {
if (i < 0) -1
else arr.length - i - 1
}
关于algorithm - 用给定的总和计算最小子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23168934/
我正在执行大型 ffdf 对象的子集,我注意到当我使用 subset.ff 时,它会生成大量 NA。我通过使用 ffwhich 尝试了另一种方法,结果要快得多,并且没有生成 NA。这是我的测试: li
我对 Prolog 有点陌生。我正在尝试编写一个函数subset(Set, Subset) 来确定Subset 是否是Set 的子集(duh)。另外,如果第二个参数没有实例化,它应该输出每个可能的子集
一、题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 二、示例 输入:nums = [1,2
我想从数据帧的操作中排除一列。当然,我可以在没有要排除的列的情况下复制数据框,但这似乎是一种解决方法。我认为必须有一种更简单的方法来进行子集化。 所以这个示例代码应该显示我在做什么。 df colMe
我有一个 SpatialPolygonsDataFrame我通过使用 readOGR 读取 shapefile 创建的在 rgdal包裹。我正在尝试使用它来使用 spsample 生成采样网格在 sp
我想解决一个简单的问题,但即使我尝试了很多不同的方法,我也找不到解决方案。我正在使用 SICStus Prolog (如果这很重要),并且我想获取列表的所有子列表/子集(我不知道哪个术语是正确的),其
我目前正在使用 shinyTable,它是 HandsonTable (https://github.com/trestletech/shinyTable) 的 shiny 兼容实现。巧合的是,我意识
我正在 Delphi 中构建一个表单,其中包含服务下拉列表和用于选择服务的附加组件网格。我获取的数据来自 API,并且我将服务的数据存储在 ADODataSet 中,如下所示: ID (integer
subset() 函数有问题。如何通过观察次数对我的数据框的一个因子进行子集化? NAME CLASS COLOR VALUE antonio
我想知道是否有任何简单的算法来比较一个散列是否是另一个散列的子集。 例如,如果 $HASH{A} = B; $HASH{B} = C; $HASH{C} = D; $HASH2{A} = B; $HA
这个问题在这里已经有了答案: Array combinations without repetition (1 个回答) 关闭 8 年前。 给定一个数组,如何在 postgresql 中找到一定大小
我有下一个程序。我应该如何在 main 中使用迭代器以显示总和为 0 的子集? 我的程序应该打印: 2 -2 5 -5 # include # include using namespace st
我正在寻找一个可以自定义的 Markdown 解析器,最好是 Javascript。特别是,我想删除使用实际 HTML 标签的选项。我尝试编辑摊牌的来源,但无法弄清楚。 Jquery 集成也很好,尽管
我有一个包含名称列表的文件(引用文件 1): Apple Bat Cat 我有另一个文件(引用文件 2),其中包含名称列表和详细信息引用: Apple bla blaa aaaaaaaaagggggg
我有两个带有排序行的文件。一个文件 (B) 是另一个文件 (A) 的子集。我想找到 A 中不在 B 中的所有行。理想情况下,我想创建一个包含这些行的文件 (C)。这在 Unix 中可能吗?我正在寻找一
我有一个包含肽序列的列的数据框,我只想保留字符串中没有内部“R”或“K”的行。 df1 <- data.frame( Peptide = c("ABCOIIJUHFSAUJHR", "AOFI
这个问题在这里已经有了答案: How to subset matrix to one column, maintain matrix data type, maintain row/column na
假设我有一个列表向量: library(tidyverse) d 2) # A tibble: 5 x 1 x 1 2 3 4 5 最佳答案 应该是 lengt
我自己从来没有运行过javadoc(无论是在命令行还是ant's javadoc task;我将使用ant)——我需要为我编写的库生成一个javadoc。 问题是我的 java 库被组织成几个包,在
假设一个多方加密方案,类似于答案:Encryption with multiple different keys? . 那是。一组键K可以用来破译密文。 有没有办法过期: K'⊆ K 这样 K \ K
我是一名优秀的程序员,十分优秀!