DEV Community

Cover image for Understanding Big O Notation: A Simple Guide for Beginners
Homayoun Mohammadi
Homayoun Mohammadi

Posted on • Edited on

Understanding Big O Notation: A Simple Guide for Beginners

What is Big O Notation?

Big O notation is a way to measure how fast an algorithm runs or how much memory it uses as the input size grows. It helps programmers compare different algorithms and choose the most efficient one.

Why is Big O Notation Important?

A blue background the graph and that increasing at the left and in the right side is the O which write big inside that represent the big O

  • Helps optimize code for speed and memory.
  • Essential for technical interviews.
  • Used in real-world applications to handle large datasets efficiently.

Common Big O Notations Explained

1. O(1) – Constant Time

  • Description: The algorithm takes the same amount of time, no matter the input size.
  • Example: Accessing the first element of an array.
public void printFirstItem(int[] numbers) {  
    System.out.println(numbers[0]); // Always O(1)  
}  
Enter fullscreen mode Exit fullscreen mode
  • Best for: Operations where input size doesn’t affect performance.

2. O(n) – Linear Time

  • Description: The runtime grows directly with the input size.
  • Example: Looping through an array.
public void printAllItems(int[] numbers) {  
    for (int num : numbers) {  
        System.out.println(num); // O(n)  
    }  
}  
Enter fullscreen mode Exit fullscreen mode
  • Best for: Simple searches or iterations.

3. O(n²) – Quadratic Time

  • Description: The runtime grows with the square of the input size (common in nested loops).
  • Example: Comparing every pair in an array.
public void printAllPairs(int[] numbers) {  
    for (int first : numbers) {  
        for (int second : numbers) {  
            System.out.println(first + ", " + second); // O(n²)  
        }  
    }  
}  
Enter fullscreen mode Exit fullscreen mode
  • Avoid when: Working with large datasets (very slow).

4. O(log n) – Logarithmic Time

  • Description: Very efficient—runtime grows slowly even with large inputs.
  • Example: Binary search (divides the problem in half each step).
  • Best for: Searching in sorted data.

5. O(2ⁿ) – Exponential Time

  • Description: Extremely slow—runtime doubles with each new input.
  • Example: Recursive Fibonacci without memoization.
  • Avoid when possible: Not scalable for large inputs.

Space Complexity in Big O

Big O also measures memory usage.

Example:

public void copyArray(String[] names) {  
    String[] copy = new String[names.length]; // O(n) space  
    for (String name : names) {  
        System.out.println("Hi " + name); // O(1) space  
    }  
}  
Enter fullscreen mode Exit fullscreen mode
  • O(n) space: Storing a new array.
  • O(1) space: Fixed memory usage (no extra storage).

Big O Cheat Sheet

A graph with purple background and show the each big o performance if you can see the same is blow in the table

Notation Name Performance Use Case
O(1) Constant Best Accessing array index
O(log n) Logarithmic Very Good Binary search
O(n) Linear Good Simple loops
O(n²) Quadratic Slow Nested loops
O(2ⁿ) Exponential Very Slow Recursive algorithms

Final Thoughts

Understanding Big O notation helps you write faster and more efficient code. Whether you're preparing for coding interviews or optimizing real-world applications, mastering Big O is a must for every programmer.

Key Takeaways:

✔ Big O measures time and space complexity.

O(1) and O(log n) are the most efficient.

✔ Avoid O(n²) and O(2ⁿ) for large datasets.

✔ Always consider both time and space complexity when optimizing code.

By learning Big O, you’ll write smarter, faster, and more scalable algorithms! 🚀

Top comments (3)

Collapse
 
homayoun_mohammadi_2cbc42 profile image
Homayoun Mohammadi

Thanks for sharing

Collapse
 
homayunmmdy profile image
Homayoun Mohammadi

your welcome

Some comments may only be visible to logged-in visitors. Sign in to view all comments.