【发布时间】:2016-07-08 20:42:28
【问题描述】:
我正在尝试解决this HackerRank 关于动态规划的问题。我想我已经有了一个解决方案,可能不是很有效,但我仍在尝试。
我提交了我的代码,但它未能通过一个大型测试用例,所以我尝试使用该测试用例自己测试它。问题是当我输入输入数据时 Xcode 没有响应,它没有崩溃,但它不会继续执行代码。
首先,我让这段代码读取包含 n 个空格分隔的整数的单行,在本例中为 68,738。
let arr = readLine()!.characters.split(" ").map({ Int(String($0))! })
几秒钟后(几秒钟,甚至几分钟),代码崩溃了,说它在展开可选值时发现了 nil。
所以我尝试将该指令拆分如下:
let input = readLine()!
let arr = input.characters.split(" ").map({ Int(String($0))! })
在这里,我希望代码在第二行崩溃,试图将输入字符串映射到整数数组。但是代码在尝试 readLine() 时崩溃了。输入字符串的长度为 370,112。
我也尝试使用此代码至少获取字符串输入:
let input = readLine()
let arr = input!.characters.split(" ").map({ Int(String($0))! })
但输入为零。我在这里假设输入字符串太长,但在 32 字节 CPU 上不应该是 2,147,483,648?应该够空间了吧?
我用谷歌搜索了 readLine() 中是否有任何限制,但一无所获。我会尝试用另一种语言解决这个问题,但我真的很想用 Swift 来解决这个问题。有什么我没有看到的吗?
【问题讨论】:
-
是的,行长是有限制的,例如看unix.stackexchange.com/questions/131105/… 总而言之,这种方法不适用于大数据。
-
我刚刚用 > 30MB 的输入文件测试了 readLine(),没有问题。你确定 readLine() 是罪魁祸首吗?
-
@Sulthan:
readLine()使用 stdiogetline函数,并且唯一的“限制”是换行符必须出现在第一个 SSIZE_MAX = 2^63-1 字节中。跨度> -
@MartinR 你能尝试从标准输入而不是文件读取吗?
-
@VladimirNul:我用
./testProg < file和cat file | ./testProg对其进行了测试,其中file包含一个非常长的行。 readLine 从标准输入读取,并从文件重定向。
标签: swift