私はハッカーランクサイトで課題を解決しており、テストに配置されたデータの量に関連する面白いRuntime Error
を受け取ります。ディクショナリとwhileループの最適化方法
タスク:
名前と電話番号が与えられ、それぞれの電話番号に 友人の名前をマップする電話帳を組み立てます。あなたは あなたの電話帳を照会するための未知数の名前が与えられます。 がそれぞれ照会された場合は、電話帳から関連するエントリを という新しい行の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
}
私はRuntime Error
を避けるために、コードの最適化に興味を持っています。私はすでに、for-loop
の代わりにのDictionary
とwhile
の使用法で接続されているいくつかの調整を行います。何を修正すべきかアドバイスしていただけますか?
を「最適化」と「ランタイムエラーを避けるには、」二つの異なるタスクです。あなたのプログラムはHackerrankにとって遅すぎるのですか?それとも*エラー*で終了しますか? –
@MartinRすべてのテストケースは、このテストプロダクションを100000個含む要素を除いて正常に実行されています。ランタイムエラー –
* "**未知数の**名前を照会する" *あなたはエントリに*同じ量*のクエリが続くと仮定しているようです。 –