Accessing map values in Go - Time & Space Complexity
When we access values in a map, we want to know how long it takes as the map grows.
We ask: How does the time to get a value change when the map has more items?
Analyze the time complexity of the following code snippet.
package main
func getValue(m map[string]int, key string) int {
return m[key]
}
This code returns the value for a given key from a map.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Direct lookup of a key in the map.
- How many times: Exactly once per call.
Looking up a key takes about the same time no matter how many items are in the map.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The time stays roughly the same as the map grows.
Time Complexity: O(1)
This means accessing a value by key takes about the same time no matter how big the map is.
[X] Wrong: "Looking up a key takes longer if the map has more items."
[OK] Correct: Maps use a system that finds keys quickly, so the time does not grow with size.
Understanding how map lookups work helps you explain why your code stays fast even with lots of data.
"What if the map used a list instead of a hash? How would the time complexity change?"
Practice
value, ok := myMap["key"] do in Go?Solution
Step 1: Understand map access syntax
In Go,value, ok := myMap["key"]retrieves the value for the key and a boolean indicating if the key exists.Step 2: Explain the boolean
Theokokis true if the key is present, false otherwise.Final Answer:
It retrieves the value for "key" and checks if the key exists in the map. -> Option AQuick Check:
Map access with existence check = value, ok [OK]
- Thinking it deletes the key
- Assuming it adds a key
- Confusing it with map length
m for key k?Solution
Step 1: Recall Go map existence check syntax
In Go, to check if a key exists, usevalue, ok := m[k]and then checkok.Step 2: Analyze options
value := m[k]; if value != nil { ... } wrongly assumes value is nil for missing keys, which is not always true. if m.contains(k) { ... } uses a method that does not exist. if m[k] != 0 { ... } checks value but zero value can be valid.Final Answer:
value, ok := m[k]; if ok { ... } -> Option AQuick Check:
Use value, ok to check key presence [OK]
- Checking value against nil or zero instead of ok
- Using non-existent map methods
- Assuming zero value means key missing
m := map[string]int{"a": 10, "b": 20}
value, ok := m["c"]
fmt.Println(value, ok)Solution
Step 1: Understand map lookup for missing key
Key "c" is not in mapm, sovaluegets zero value for int, which is 0, andokis false.Step 2: Print output values
Printingvalueandokprints "0 false".Final Answer:
0 false -> Option DQuick Check:
Missing key returns zero value and false [OK]
- Assuming missing key returns true
- Expecting runtime error for missing key
- Confusing zero value with actual stored value
m := map[string]int{"x": 5}
value := m["y"]
if value {
fmt.Println("Key exists")
}Solution
Step 1: Analyze the if condition
The variablevalueis an int, but Go requires a boolean expression in if conditions.Step 2: Understand Go type rules
Using an int directly as a boolean causes a compile-time error.Final Answer:
Cannot use int value as boolean in if condition. -> Option CQuick Check:
if conditions need boolean, not int [OK]
- Assuming missing key causes panic
- Ignoring type mismatch in if condition
- Thinking map declaration is missing
m := map[string]int{"a": 1, "b": 0, "c": 3}, how can you print only keys that exist and have a non-zero value?Solution
Step 1: Iterate over map with key and value
Usefor k, v := range mto get keys and values.Step 2: Check for non-zero values
Check ifv != 0to filter keys with non-zero values.Step 3: Print keys that meet condition
Print the keykinside the if block.Final Answer:
for k, v := range m { if v != 0 { fmt.Println(k) } } -> Option BQuick Check:
Filter keys by value != 0 using range loop [OK]
- Using value as boolean directly
- Checking map key against nil
- Ignoring zero values in condition
Ready to prove it?
Pass the test and this pattern moves unknown
