Bird
Raised Fist0
DSA Javaprogramming~20 mins

Divide and Conquer Strategy and Recurrence Relations in DSA Java - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Divide and Conquer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Recursive Merge Sort Call Count
Consider the following Java method that counts the number of recursive calls made during a merge sort on an array of size n. What is the output when calling countMergeSortCalls(8)?
DSA Java
public class MergeSortCounter {
    static int count = 0;
    public static int countMergeSortCalls(int n) {
        if (n <= 1) {
            count++;
            return count;
        }
        count++;
        countMergeSortCalls(n / 2);
        countMergeSortCalls(n / 2);
        return count;
    }

    public static void main(String[] args) {
        System.out.println(countMergeSortCalls(8));
    }
}
A8
B15
C7
D16
Attempts:
2 left
💡 Hint
Think about how many times the array is split until size 1 and how many calls are made at each level.
🧠 Conceptual
intermediate
1:30remaining
Master Theorem Case Identification
Given the recurrence relation T(n) = 3T(n/4) + n, which case of the Master Theorem applies?
ACase 2: f(n) = Θ(n^log_b(a) * log^k(n)), solution T(n) = Θ(n^log_b(a) * log^{k+1}(n))
BCase 1: f(n) = O(n^log_b(a)-ε), solution T(n) = Θ(n^log_b(a))
CCase 3: f(n) = Ω(n^log_b(a)+ε), solution T(n) = Θ(f(n))
DNone of the above
Attempts:
2 left
💡 Hint
Calculate log base b of a and compare f(n) with n^{log_b(a)}.
🔧 Debug
advanced
1:30remaining
Identify the Error in Recurrence Implementation
This Java method attempts to compute the time complexity T(n) = 2T(n/2) + n using recursion and returns the total cost. What error will occur when running computeTime(0)?
DSA Java
public class Recurrence {
    public static int computeTime(int n) {
        if (n == 1) {
            return 1;
        }
        return 2 * computeTime(n / 2) + n;
    }

    public static void main(String[] args) {
        System.out.println(computeTime(0));
    }
}
AArithmeticException due to division by zero
BReturns 0 without error
CCompilation error
DStackOverflowError due to infinite recursion
Attempts:
2 left
💡 Hint
Check the base case and what happens when n=0.
🚀 Application
advanced
1:30remaining
Calculate Number of Subproblems in Divide and Conquer
A divide and conquer algorithm splits a problem of size n into 5 subproblems each of size n/3, and does linear work outside the recursive calls. How many subproblems are created at the third level of recursion?
A125
B15
C27
D81
Attempts:
2 left
💡 Hint
Number of subproblems at level k is a^k where a is the number of subproblems per call.
🧠 Conceptual
expert
2:00remaining
Exact Solution of Recurrence Using Recursion Tree
Given the recurrence T(n) = 4T(n/2) + n^2, what is the exact asymptotic solution for T(n)?
AΘ(n^2 log n)
BΘ(n^2)
CΘ(n^3)
DΘ(n^{log_2 4})
Attempts:
2 left
💡 Hint
Use Master Theorem: a=4, b=2, f(n)=n^2, compare f(n) with n^{log_b a}.

Practice

(1/5)
1. What is the main idea behind the Divide and Conquer strategy in algorithms?
easy
A. Store all intermediate results to avoid repeated calculations
B. Solve the problem by trying all possible solutions one by one
C. Use a single loop to iterate through all elements
D. Break the problem into smaller subproblems, solve them independently, then combine results

Solution

  1. Step 1: Understand the divide and conquer approach

    It splits a big problem into smaller parts that are easier to solve.
  2. Step 2: Combine the solutions of subproblems

    After solving smaller parts, their results are merged to get the final answer.
  3. Final Answer:

    Break the problem into smaller subproblems, solve them independently, then combine results -> Option D
  4. Quick Check:

    Divide and conquer = split, solve, combine [OK]
Hint: Divide big problem into smaller parts, solve, then merge [OK]
Common Mistakes:
  • Confusing divide and conquer with brute force
  • Thinking it uses only loops without recursion
  • Mixing it up with dynamic programming
2. Which of the following is the correct recurrence relation for the Merge Sort algorithm?
easy
A. T(n) = T(n/2) + O(1)
B. T(n) = 2T(n/2) + O(n)
C. T(n) = T(n-1) + O(1)
D. T(n) = 3T(n/3) + O(n^2)

Solution

  1. Step 1: Recall Merge Sort process

    Merge Sort splits array into two halves, sorts each half, then merges.
  2. Step 2: Write recurrence relation

    It calls itself twice on half size (2T(n/2)) plus merging cost O(n).
  3. Final Answer:

    T(n) = 2T(n/2) + O(n) -> Option B
  4. Quick Check:

    Merge Sort recurrence = 2T(n/2) + n [OK]
Hint: Merge sort splits in two, merges in linear time [OK]
Common Mistakes:
  • Using T(n-1) instead of T(n/2)
  • Ignoring the merge cost O(n)
  • Confusing with quicksort recurrence
3. What is the output of the following Java method that uses divide and conquer?
public static int sumArray(int[] arr, int start, int end) {
    if (start == end) return arr[start];
    int mid = (start + end) / 2;
    return sumArray(arr, start, mid) + sumArray(arr, mid + 1, end);
}

public static void main(String[] args) {
    int[] nums = {2, 4, 6, 8};
    System.out.println(sumArray(nums, 0, nums.length - 1));
}
medium
A. 20
B. 10
C. 0
D. Compilation error

Solution

  1. Step 1: Understand the method's logic

    The method splits the array into halves recursively and sums elements.
  2. Step 2: Calculate sum of array elements

    Sum of {2,4,6,8} = 2+4+6+8 = 20.
  3. Final Answer:

    20 -> Option A
  4. Quick Check:

    Sum of array = 20 [OK]
Hint: Divide array, sum halves, add results [OK]
Common Mistakes:
  • Confusing mid calculation causing infinite recursion
  • Forgetting to include last element
  • Assuming method returns partial sums
4. Identify the error in the following recurrence relation code snippet for a divide and conquer algorithm:
int divideConquer(int n) {
    if (n == 1) return 1;
    int result = divideConquer(n / 2) + divideConquer(n / 2);
    return result + n;
}
medium
A. The base case should be n == 0 instead of n == 1
B. No error, code is correct
C. The function calls divideConquer(n / 2) twice causing redundant work
D. The addition of n should be outside the return statement

Solution

  1. Step 1: Analyze recursive calls

    The function calls divideConquer(n/2) twice separately, repeating work.
  2. Step 2: Identify redundancy

    Calling the same function twice with same argument duplicates effort, inefficient.
  3. Final Answer:

    The function calls divideConquer(n / 2) twice causing redundant work -> Option C
  4. Quick Check:

    Repeated calls with same input cause redundancy [OK]
Hint: Avoid duplicate recursive calls with same parameters [OK]
Common Mistakes:
  • Thinking base case is wrong
  • Ignoring duplicate calls
  • Assuming addition placement causes error
5. Given the recurrence relation T(n) = 3T(n/3) + n, which of the following is the correct time complexity using the Master Theorem?
hard
A. O(n log n)
B. O(n^2)
C. O(n)
D. O(log n)

Solution

  1. Step 1: Identify parameters for Master Theorem

    Here, a=3, b=3, f(n)=n.
  2. Step 2: Calculate log_b(a)

    log_3(3) = 1.
  3. Step 3: Compare f(n) with n^{log_b(a)}

    f(n) = n and n^{log_b(a)} = n^1 = n, so f(n) = Theta(n^{log_b(a)}).
  4. Step 4: Apply Master Theorem case 2

    Time complexity T(n) = Theta(n log n).
  5. Final Answer:

    O(n log n) -> Option A
  6. Quick Check:

    Master theorem case 2 = n log n [OK]
Hint: Use Master theorem: compare f(n) with n^log_b(a) [OK]
Common Mistakes:
  • Confusing log base or value
  • Choosing wrong Master theorem case
  • Ignoring the additive term n
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