Start learning free

LESSON 130 OF 410 · LOOPS & CONDITIONALS

Print Odd Numbers in Java: Time Complexity O(n)

Practice Read the full explanation

Inside the code editor we've tried to write a function that takes a number n as argument and prints to the console the odd numbers from 0 through n.

So when we called printOddNumbers(8), we expected our code to print:

1
3
5
7

but it seems like we made some mistakes because when we run our code, it prints nothing.


Assignment:

Your task is to fix our function such that it prints the odd numbers from 0 through n.

STEP 1 OF 1
    Ctrl + Enter to check

    JAVA · LOOPS & CONDITIONALS

    Buggy Code Print Odd Numbers in Java, explained

    Understanding the Problem

    The core challenge here is to correctly identify and print all odd numbers from 0 to a given number n. Odd numbers are integers that are not divisible by 2. This problem is significant in various applications such as filtering data, mathematical computations, and more.

    Potential pitfalls include misunderstanding the range (0 to n) and incorrectly identifying odd numbers.

    Approach

    To solve this problem, we need to iterate through all numbers from 0 to n and check if each number is odd. A number is odd if it is not divisible by 2 (i.e., number % 2 != 0).

    Let's start with a naive approach and then optimize it:

    Naive Approach

    The naive approach involves iterating through each number from 0 to n and checking if it is odd. This approach is straightforward but not the most efficient.

    Optimized Approach

    An optimized approach would be to start the loop from 1 and increment by 2, thus directly iterating over odd numbers only. This reduces the number of iterations by half.

    Algorithm

    Here is a step-by-step breakdown of the optimized algorithm:

    1. Start a loop from 1 to n.
    2. Increment the loop counter by 2 in each iteration.
    3. Print the current loop counter.

    Code Implementation

    Below is the Java code for the optimized solution:

    public class PrintOddNumbers {
        public static void printOddNumbers(int n) {
            // Start from 1 and increment by 2 to get only odd numbers
            for (int i = 1; i <= n; i += 2) {
                System.out.println(i); // Print the current odd number
            }
        }
    
        public static void main(String[] args) {
            printOddNumbers(8); // Test the function with n = 8
        }
    }
    

    Complexity Analysis

    The time complexity of this approach is O(n/2), which simplifies to O(n). The space complexity is O(1) as we are not using any extra space proportional to the input size.

    Edge Cases

    Consider the following edge cases:

    • n = 0: The function should print nothing.
    • n = 1: The function should print 1.
    • Negative values of n: The function should handle gracefully, possibly by printing nothing.

    Testing

    To test the solution comprehensively, consider the following test cases:

    • printOddNumbers(0) should print nothing.
    • printOddNumbers(1) should print 1.
    • printOddNumbers(8) should print 1, 3, 5, 7.
    • printOddNumbers(-5) should print nothing.

    Thinking and Problem-Solving Tips

    When approaching such problems, always start by understanding the requirements and constraints. Break down the problem into smaller parts and think about the most efficient way to solve each part. Practice similar problems to improve your problem-solving skills.

    Conclusion

    In this blog post, we discussed how to fix a function to print odd numbers from 0 to n. We explored both naive and optimized approaches, provided a detailed algorithm, and implemented the solution in Java. Understanding and solving such problems is crucial for developing strong programming skills.

    Additional Resources

    For further reading and practice, consider the following resources:

    Keep going with JavaAbout 340 step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free