Dictionary 如何优化字典和while循环
我正在hackerrank站点中解决任务,并收到有趣的Dictionary 如何优化字典和while循环,dictionary,optimization,while-loop,swift3,runtime,Dictionary,Optimization,While Loop,Swift3,Runtime,我正在hackerrank站点中解决任务,并收到有趣的运行时错误,该错误与测试中放置的数据量有关 任务: 给定姓名和电话号码,组装一本地图电话簿 将朋友的姓名添加到各自的电话号码中。那么你就会 提供了未知数量的姓名以查询您的电话簿。对于 每次查询时,在屏幕上打印通讯录中的相关条目 格式name=phoneNumber中的新行;如果找不到的条目, 未找到打印 我的解决方案: let n = Int(readLine()!)! //Amount of tests let count = n * 2/
运行时错误
,该错误与测试中放置的数据量有关
任务:
给定姓名和电话号码,组装一本地图电话簿
将朋友的姓名添加到各自的电话号码中。那么你就会
提供了未知数量的姓名以查询您的电话簿。对于
每次查询时,在屏幕上打印通讯录中的相关条目
格式name=phoneNumber中的新行;如果找不到的条目,
未找到打印
我的解决方案:
let n = Int(readLine()!)! //Amount of tests
let count = n * 2//Insertion to the dictionary and validation of the data
var step = 0
var book = Dictionary<String, String>(minimumCapacity: n)
while step < count {
if (step < n ) {
let bookData = readLine()!.characters.split{$0 == " "}.map(String.init)
book[bookData[0]] = bookData[1]
} else {
let name = readLine()!
if let num = book[name] as String! {
print("\(name)=\(num)")
} else {
print("Not found")
}
}
step += 1
}
让n=Int(readLine()!)//测试量
让count=n*2//插入字典并验证数据
var步长=0
var book=字典(最小容量:n)
而步长<计数{
如果(步骤
我对优化代码以避免运行时错误感兴趣。我已经做了一些调整,它们与
字典的最小容量以及的使用有关,而不是for loop
。您能告诉我应该修复什么吗?输入数据由一个固定的部分组成(条目编号N
),
后跟N
名称/编号对行)和可变部分
(查询)
您可以使用强制展开readLine()代码>用于固定零件,因为
你知道它会成功的。但是对于你的可变部分
调用readLine()
,直到它返回nil
代码将如下所示:
let n = Int(readLine()!)! // Number of entries
var book = [String: String](minimumCapacity: n)
for _ in 1...n {
let bookData = readLine()!.characters.split{$0 == " "}.map(String.init)
book[bookData[0]] = bookData[1]
}
while let name = readLine() {
if let num = book[name] {
print("\(name)=\(num)")
} else {
print("Not found")
}
}
输入数据由一个固定的部分组成(条目数N
,
后跟N
名称/编号对行)和可变部分
(查询)
您可以使用强制展开readLine()代码>用于固定零件,因为
你知道它会成功的。但是对于你的可变部分
调用readLine()
,直到它返回nil
代码将如下所示:
let n = Int(readLine()!)! // Number of entries
var book = [String: String](minimumCapacity: n)
for _ in 1...n {
let bookData = readLine()!.characters.split{$0 == " "}.map(String.init)
book[bookData[0]] = bookData[1]
}
while let name = readLine() {
if let num = book[name] {
print("\(name)=\(num)")
} else {
print("Not found")
}
}
“优化”和“避免运行时错误”是两个不同的任务。您的程序对Hackerrank来说是太慢了还是终止时出现了错误?@MartinR除了包含100000个元素的测试用例外,所有测试用例都运行良好此测试生成运行时错误您的代码如何处理“要查询的未知名称数”?您似乎假设条目后面跟着相同数量的查询。@MartinR您是对的,这是一个要点。请将您的通知作为答案发布。“优化”和“避免运行时错误”是两个不同的任务。您的程序对Hackerrank来说是太慢了还是终止时出现了错误?@MartinR除了包含100000个元素的测试用例外,所有测试用例都运行良好此测试生成运行时错误您的代码如何处理“要查询的未知名称数”?您似乎假设条目后面跟着相同数量的查询。@MartinR您是对的,这是一个要点。请将您的通知作为答复。