Frequency Queries

  • + 0 comments

    Swift solution using 2 Dictionaries:

    func freqQuery(queries: [[Int]]) -> [Int] {
        var numbers = [Int: Int]()
        var freq = [Int: Int]()
        var result = [Int]()
        for query in queries {
            let command = query[0]
            let value = query[1]
            
            if command == 1 {
                if let oldCount = numbers[value] {
                    let newCount = oldCount + 1
                    freq[oldCount] = (freq[oldCount] ?? 0) - 1
                    freq[newCount] = (freq[newCount] ?? 0) + 1
                    numbers[value] = newCount
                } else {
                    freq[1] = (freq[1] ?? 0) + 1
                    numbers[value] = 1
                }
                
            } else if command == 2 {
                if let oldCount = numbers[value] {
                    let newCount = oldCount - 1
                    freq[oldCount] = (freq[oldCount] ?? 0) - 1    
                    freq[newCount] = (freq[newCount] ?? 0) + 1
                    if newCount == 0 {
                        numbers[value] = nil
                    } else {
                        numbers[value] = newCount
                    }
                }
            } else if command == 3 {
                if let check = freq[value], check > 0 {
                    result.append(1)
                } else {
                    result.append(0)
                }
            }
        }
        return result
    }