I am trying to solve the Dynamic Array problem on HackerRank:
- Create a list, seqList, of N empty sequences, where each sequence is indexed from 0 to N-1. The elements within each of the N sequences also use 0-indexing.
- Create an integer, lastAnswer, and initialize it to 0.
- The 2 types of queries that can be performed on your list of sequences (seqList) are described below:
- Query: 1 x y
- Find the sequence, seq, at index ((x ^ lastAnswer) % N) in seqList.
- Append integer y to sequence seq.
- Query: 2 x y
- Find the sequence, seq, at index ((x ^ lastAnswer) % N) in seqList.
- Find the value of element y % size in seq (where size is the size of seq) and assign it to lastAnswer.
- Print the new value of lastAnswer on a new line.
However, I am getting a “time out error” for very large inputs.
Below is my code in Swift so far:
func dynamicArray(n: Int, queries: [[Int]]) -> [Int] {
var sequences: [Int: [Int]] = [:]
var lastAnswer = 0
var answerlist = [Int]()
for query in queries {
let queryType = query[0]
let x = query[1]
let y = query[2]
switch queryType {
case 1:
let seq = (x ^ lastAnswer) % n
if var sequence = sequences[seq] {
sequence.append(y)
sequences[seq] = sequence
} else {
sequences[seq] = [y]
}
case 2:
let seq = (x ^ lastAnswer) % n
let index = y % (sequences[seq])!.count
lastAnswer = sequences[seq]![index]
answerlist.append(lastAnswer)
default: break
}
}
return answerlist
}
Can it be further optimised?