Return inside loops in C++ - Time & Space Complexity
When a return statement is inside a loop, it can stop the loop early. This affects how long the code runs.
We want to know how the running time changes as the input grows when return is inside a loop.
Analyze the time complexity of the following code snippet.
bool containsZero(int arr[], int n) {
for (int i = 0; i < n; i++) {
if (arr[i] == 0) {
return true;
}
}
return false;
}
This code checks if an array has a zero. It stops and returns true as soon as it finds one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the array elements one by one.
- How many times: Up to n times, but may stop earlier if zero is found.
Execution depends on where zero appears. If zero is early, fewer steps; if none, all elements checked.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Between 1 and 10 checks |
| 100 | Between 1 and 100 checks |
| 1000 | Between 1 and 1000 checks |
Pattern observation: The number of steps can vary from very few to all elements, depending on input.
Time Complexity: O(n)
This means in the worst case, the code checks every element once before returning.
[X] Wrong: "Because of the return inside the loop, the code always runs fast and checks only one element."
[OK] Correct: The return stops the loop early only if the condition is met early. If not, the loop runs through all elements.
Understanding how early returns affect loops helps you explain code efficiency clearly and shows you think about best and worst cases.
"What if the return statement was replaced by a flag variable and the loop always ran through all elements? How would the time complexity change?"
Practice
What happens when a return statement is executed inside a loop in a C++ function?
Solution
Step 1: Understand the role of return in functions
Thereturnstatement immediately ends the function and sends back a value.Step 2: Analyze return inside a loop
Whenreturnis inside a loop, it stops the entire function, not just the loop.Final Answer:
The function immediately stops and returns the value. -> Option CQuick Check:
Return inside loop = function stops [OK]
- Thinking return only stops the loop
- Confusing return with continue or break
- Assuming code after return runs
Which of the following is the correct syntax to return the first even number found in a vector nums using a loop?
for (int i = 0; i < nums.size(); i++) {
if (nums[i] % 2 == 0) {
// return here
}
}Solution
Step 1: Identify what to return
The question asks to return the first even number, so we return the value at indexi.Step 2: Match the correct return statement
return nums[i];returns the actual even number found.Final Answer:
return nums[i]; -> Option AQuick Check:
Return value, not index [OK]
- Returning the index instead of the value
- Returning the whole vector
- Returning incorrect arithmetic on index
What is the output of the following C++ function when called with findFirstPositive({-3, -1, 0, 4, 5})?
int findFirstPositive(std::vector<int> nums) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] > 0) {
return nums[i];
}
}
return -1;
}Solution
Step 1: Trace the loop to find first positive
The loop checks each element: -3 (no), -1 (no), 0 (no), 4 (yes, positive).Step 2: Return the first positive number found
At 4, the function returns immediately with 4.Final Answer:
4 -> Option BQuick Check:
First positive = 4 [OK]
- Returning -1 instead of first positive
- Confusing 0 as positive
- Returning last positive instead of first
Identify the error in this function that tries to return the first negative number from a vector nums:
int findNegative(std::vector<int> nums) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] < 0) {
return nums[i];
} else {
return 0;
}
}
return -1;
}Solution
Step 1: Analyze the else return inside the loop
The else block returns 0 immediately if the first element is not negative, stopping the function early.Step 2: Understand why this is wrong
This prevents checking all elements; function should only return 0 after full loop if no negative found.Final Answer:
The function returns 0 too early inside the loop. -> Option DQuick Check:
Return in else inside loop causes early stop [OK]
- Returning inside else causes premature exit
- Thinking loop runs fully before return
- Misunderstanding return type requirements
Write a function that returns the index of the first zero in a vector nums. If no zero is found, return -1. Which of the following implementations is correct?
Option A:
int findZero(std::vector<int> nums) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
return i;
}
}
return -1;
}
Option B:
int findZero(std::vector<int> nums) {
int index = -1;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
index = i;
}
}
return index;
}
Option C:
int findZero(std::vector<int> nums) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
break;
}
}
return i;
}
Option D:
int findZero(std::vector<int> nums) {
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
return nums[i];
}
}
return -1;
}Solution
Step 1: Verify the correct logic for finding first zero index
The implementation that returnsiimmediately whennums[i] == 0and -1 after the loop is correct.Step 2: Why others fail
The one setting a variable continues the loop, returning the last zero's index. Thebreakversion doesn't return -1 if no zero found andigoes out of scope. The last returns the value0instead of index.Final Answer:
Option A -> Option AQuick Check:
Return index immediately on first zero [OK]
- Returning value instead of index
- Returning last zero index instead of first
- Using break without returning causes scope errors
Ready to prove it?
Pass the test and this pattern moves unknown
