Bird
Raised Fist0
C++programming~5 mins

Nested loops in C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Nested loops
O(n²)
Understanding Time Complexity

When we use loops inside other loops, the time it takes to run the code can grow quickly.

We want to understand how the total work changes as the input size gets bigger.

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        // some constant time operation
        std::cout << i * j << std::endl;
    }
}
    

This code prints the product of i and j for every pair of numbers from 0 to n-1.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The inner loop runs a print operation.
  • How many times: The inner loop runs n times for each of the n iterations of the outer loop, so n x n times total.
How Execution Grows With Input

As n grows, the total operations grow much faster because of the two loops inside each other.

Input Size (n)Approx. Operations
10100
10010,000
10001,000,000

Pattern observation: When n gets 10 times bigger, the work gets 100 times bigger because of the nested loops.

Final Time Complexity

Time Complexity: O(n²)

This means the work grows by the square of the input size, so doubling n makes the work about four times bigger.

Common Mistake

[X] Wrong: "The time grows just a little bit because the loops are simple."

[OK] Correct: Because the inner loop runs completely for each outer loop step, the total work multiplies, not just adds.

Interview Connect

Understanding nested loops helps you explain how your code handles bigger inputs and shows you can think about efficiency clearly.

Self-Check

"What if the inner loop ran only half as many times as the outer loop? How would the time complexity change?"

Practice

(1/5)
1. What does a nested loop in C++ mean?
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
// code
}
}
easy
A. Two loops running one after another
B. A loop inside another loop
C. A loop that runs only once
D. A loop that never ends

Solution

  1. Step 1: Understand the code structure

    The code shows one for loop inside another for loop, which means nested loops.
  2. Step 2: Define nested loops

    Nested loops mean one loop runs inside another loop's block of code.
  3. Final Answer:

    A loop inside another loop -> Option B
  4. Quick Check:

    Nested loop = loop inside loop [OK]
Hint: Look for one loop inside another's braces [OK]
Common Mistakes:
  • Thinking loops run one after another, not inside
  • Confusing nested loops with single loops
  • Assuming nested loops run only once
2. Which of the following is the correct syntax for a nested loop in C++?
easy
A. for(int i=0; i<3; i++) { for(int j=0; j<2; j++) { /* code */ } }
B. for i in range(3): for j in range(2): /* code */
C. while(i<3) { while(j<2) /* code */ }
D. loop(i=0; i<3; i++) { loop(j=0; j<2; j++) { /* code */ } }

Solution

  1. Step 1: Identify C++ loop syntax

    C++ uses for(initialization; condition; increment) syntax for loops.
  2. Step 2: Check each option

    for i in range(3): for j in range(2): /* code */ uses Python syntax, invalid in C++.
    for(int i=0; i<3; i++) { for(int j=0; j<2; j++) { /* code */ } } uses correct C++ syntax with nested for loops.
    while(i<3) { while(j<2) /* code */ } uses while loops missing initializations and increments.
    loop(i=0; i<3; i++) { loop(j=0; j<2; j++) { /* code */ } } uses invalid loop keyword.
  3. Final Answer:

    for(int i=0; i<3; i++) { for(int j=0; j<2; j++) { /* code */ } } -> Option A
  4. Quick Check:

    C++ nested loops use for(init; cond; inc) [OK]
Hint: Remember C++ loops use for(init; cond; inc) syntax [OK]
Common Mistakes:
  • Using Python or other language syntax in C++
  • Missing semicolons in for loop header
  • Using wrong keywords like 'loop'
3. What is the output of this C++ code?
for(int i = 1; i <= 2; i++) {
for(int j = 1; j <= 3; j++) {
std::cout << i*j << " ";
}
std::cout << std::endl;
}
medium
A. 3 6 9 \n 6 12 18
B. 1 2 3 4 5 6
C. 1 2 3 \n 2 4 6
D. 1 1 1 \n 2 2 2

Solution

  1. Step 1: Trace outer loop values

    Outer loop runs i=1 and i=2.
  2. Step 2: Calculate inner loop outputs

    For i=1, j=1 to 3: outputs 1*1=1, 1*2=2, 1*3=3.
    For i=2, j=1 to 3: outputs 2*1=2, 2*2=4, 2*3=6.
  3. Final Answer:

    1 2 3 2 4 6 -> Option C
  4. Quick Check:

    Multiply i and j in nested loops [OK]
Hint: Multiply outer and inner loop counters for output [OK]
Common Mistakes:
  • Ignoring the newline after inner loop
  • Adding all numbers instead of printing products
  • Confusing loop ranges
4. Find the error in this nested loop code:
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; i++) {
std::cout << i+j << " ";
}
std::cout << std::endl;
}
medium
A. Inner loop increments i instead of j
B. Outer loop condition is wrong
C. Missing semicolon after std::cout
D. No error, code runs fine

Solution

  1. Step 1: Check inner loop increment

    Inner loop header uses i++ instead of j++, causing infinite loop or wrong behavior.
  2. Step 2: Identify correct increment variable

    Inner loop should increment j to progress through its range.
  3. Final Answer:

    Inner loop increments i instead of j -> Option A
  4. Quick Check:

    Inner loop must increment its own variable [OK]
Hint: Check loop increments match loop variables [OK]
Common Mistakes:
  • Incrementing wrong variable in inner loop
  • Assuming code runs without checking increments
  • Confusing outer and inner loop variables
5. You want to print a 4x4 multiplication table using nested loops in C++. Which code snippet correctly achieves this?
hard
A. for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i-j << " "; } std::cout << std::endl; }
B. for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { std::cout << i+j << " "; } std::cout << std::endl; }
C. for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i+j << " "; } std::cout << std::endl; }
D. for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i*j << " "; } std::cout << std::endl; }

Solution

  1. Step 1: Understand multiplication table logic

    Each cell should print the product of row and column numbers (i*j).
  2. Step 2: Check each option's output logic

    for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i*j << " "; } std::cout << std::endl; } prints i*j correctly.
    for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { std::cout << i+j << " "; } std::cout << std::endl; } prints sum with zero-based indices.
    for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i+j << " "; } std::cout << std::endl; } prints sum with one-based indices.
    for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i-j << " "; } std::cout << std::endl; } prints difference.
  3. Final Answer:

    for(int i=1; i<=4; i++) { for(int j=1; j<=4; j++) { std::cout << i*j << " "; } std::cout << std::endl; } -> Option D
  4. Quick Check:

    Multiplication table = print i*j in nested loops [OK]
Hint: Multiply loop counters for multiplication table [OK]
Common Mistakes:
  • Using addition or subtraction instead of multiplication
  • Starting loops at 0 instead of 1 for table
  • Not printing newline after each row
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard