我试图解决这个 HackerRank的有关动态规划问题.我想我已经找到了一个解决方案,可能效率不高,但我仍在努力.
我提交了我的代码并且无法通过大型测试用例,因此我尝试使用该测试用例自行测试.问题是当我输入输入数据Xcode没有响应时,它不会崩溃,但它不会继续执行代码.
首先,我使用此代码读取包含n个以空格分隔的整数的单行,在本例中为68,738.
let arr = readLine()!.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)
经过一段时间(几秒钟,甚至几分钟),代码崩溃,说它在展开一个可选值时发现了nil.
所以我尝试将该指令拆分如下:
let input = readLine()!
let arr = input.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)
在这里,我希望代码在第二行崩溃,尝试将输入字符串映射到整数数组.但是在尝试readLine()时代码崩溃了.输入字符串长370,112.
我也尝试使用此代码以至少获取字符串输入:
let input = readLine()
let arr = input!.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)
但输入是零.我假设输入字符串太长,但在32字节CPU上不应该是2,147,483,648?我猜这个空间够了吧?
我用google搜索readLine()是否有任何限制但没有找到任何限制.我会尝试用另一种语言解决这个问题,但我真的很想在Swift中解决这个问题.有没有我没看到的东西?
readLine()是stdio getline函数的包装器,该函数只需要SSIZE_MAX在输入的第一个字符内出现换行符.在64位OS X平台,SSIZE_MAX
是2^63 - 1这意味着此只是理论上的限制.
所以readLine()不是问题,它可以读取任意长行,只要它们适合您的计算机内存.
但似乎你不能将超过1023个字符粘贴到Xcode调试器控制台中.(编辑:在C++中读取非常长的控制台输入时也观察到了这一点).
通过文件中的输入重定向在终端中运行程序是解决问题的一种方法:
$ ./myProgram < /path/to/inputData.txt
Run Code Online (Sandbox Code Playgroud)
另一种选择是添加
freopen("/path/to/your/inputData.txt", "r", stdin)
Run Code Online (Sandbox Code Playgroud)
在Swift计划的开头.这会将标准输入重定向到从给定文件中读取.这种方法的优点是你仍然可以在Xcode中调试你的程序.
| 归档时间: |
|
| 查看次数: |
1080 次 |
| 最近记录: |