Multiple return values in Go - Time & Space Complexity
When a function returns multiple values, we want to know how this affects the time it takes to run.
Does returning more than one value make the program slower as input grows?
Analyze the time complexity of the following code snippet.
func findMinMax(numbers []int) (int, int) {
min, max := numbers[0], numbers[0]
for _, num := range numbers {
if num < min {
min = num
}
if num > max {
max = num
}
}
return min, max
}
This function finds the smallest and largest numbers in a list and returns both.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: One loop through the list of numbers.
- How many times: Once for each number in the list.
As the list gets bigger, the function checks each number once.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks |
| 100 | About 100 checks |
| 1000 | About 1000 checks |
Pattern observation: The work grows directly with the number of items.
Time Complexity: O(n)
This means the time to run grows in a straight line with the input size.
[X] Wrong: "Returning two values takes twice as long as returning one."
[OK] Correct: Returning multiple values is just sending back results once the work is done; it does not repeat the work or slow the loop.
Understanding how multiple return values affect time helps you explain your code clearly and shows you know what really costs time in programs.
"What if the function returned the min and max plus the count of numbers? How would the time complexity change?"
Practice
Solution
Step 1: Understand function return types in Go
Go functions can list multiple types in parentheses to return several values together.Step 2: Interpret multiple return values meaning
This means the function sends back more than one result at once, not just one or a list.Final Answer:
The function sends back more than one result at the same time. -> Option AQuick Check:
Multiple return values = more than one result [OK]
- Thinking it returns a slice or array
- Assuming only one value can be returned
- Confusing multiple returns with repeated calls
Solution
Step 1: Check Go function return type syntax
In Go, multiple return types are enclosed in parentheses like (int, int).Step 2: Match syntax with options
func add() (int, int) { return 1, 2 } correctly uses (int, int) and returns two integers separated by a comma.Final Answer:
func add() (int, int) { return 1, 2 } -> Option DQuick Check:
Multiple returns use parentheses (type1, type2) [OK]
- Omitting parentheses around return types
- Using square brackets instead of parentheses
- Returning multiple values without declaring types
package main
import "fmt"
func divide(a, b int) (int, int) {
return a / b, a % b
}
func main() {
q, r := divide(10, 3)
fmt.Println(q, r)
}Solution
Step 1: Understand the divide function
The function returns two values: quotient (a / b) and remainder (a % b).Step 2: Calculate divide(10, 3)
10 divided by 3 is 3 with remainder 1, so returns (3, 1).Final Answer:
3 1 -> Option CQuick Check:
10/3=3 remainder 1 [OK]
- Confusing remainder with quotient
- Swapping the order of returned values
- Expecting a single return value
func names() (string, string) {
return "Alice"
}Solution
Step 1: Check function return signature
The function declares it returns two strings (string, string).Step 2: Check return statement
It returns only one string "Alice", missing the second value, causing a compile error.Final Answer:
Missing second return value causes a compile error. -> Option AQuick Check:
Return count must match declared types [OK]
- Returning fewer values than declared
- Assuming parameters affect return count
- Incorrect return statement syntax
Solution
Step 1: Check function return types
Function must return two integers (min and max), so signature must be (int, int).Step 2: Verify logic and return order
func minMax(nums []int) (int, int) { min, max := nums[0], nums[0] for _, v := range nums { if v < min { min = v } if v > max { max = v } } return min, max } correctly initializes min and max, loops through nums, updates min and max, and returns min, max in correct order.Final Answer:
func minMax(nums []int) (int, int) { min, max := nums[0], nums[0] for _, v := range nums { if v < min { min = v } if v > max { max = v } } return min, max } -> Option BQuick Check:
Return (min, max) with correct signature and logic [OK]
- Wrong return type signature
- Returning values in wrong order
- Returning only one value instead of two
Ready to prove it?
Pass the test and this pattern moves unknown
