Bird
Raised Fist0
DSA Rustprogramming~5 mins

Binary Search as Divide and Conquer in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind the divide and conquer approach in binary search?
Divide the problem into smaller parts by splitting the search range in half, then conquer by searching only the half where the target can be.
Click to reveal answer
beginner
In binary search, what condition ends the search?
When the search range is empty (start index > end index) or the target is found at the middle index.
Click to reveal answer
beginner
Why must the array be sorted for binary search to work?
Because binary search decides which half to search next based on comparison with the middle element, which only works if the array is sorted.
Click to reveal answer
intermediate
Show the recursive step in binary search as divide and conquer.
Check middle element: if target < middle, search left half; if target > middle, search right half; else return middle index.
Click to reveal answer
beginner
What is the time complexity of binary search and why?
O(log n) because each step halves the search space, quickly reducing the problem size.
Click to reveal answer
What must be true about the array for binary search to work correctly?
AThe array must have unique elements
BThe array must be sorted
CThe array must be unsorted
DThe array must be reversed
In binary search, if the target is greater than the middle element, what do you do next?
AReturn the middle index
BSearch the left half
CSearch the right half
DStop searching
What is the base case for the recursive binary search?
AWhen the target is found or the search range is empty
BWhen the array is empty
CWhen the middle element is zero
DWhen the array has only one element
How does binary search reduce the problem size each step?
ABy sorting the array
BBy splitting the array into three parts
CBy removing one element
DBy halving the search range
What is the worst-case time complexity of binary search?
AO(log n)
BO(n log n)
CO(n)
DO(1)
Explain how binary search uses the divide and conquer strategy to find a target in a sorted array.
Think about how you split the problem and focus on one half each time.
You got /4 concepts.
    Describe the conditions that stop the binary search recursion.
    When do you know you have the answer or that it is not there?
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main idea behind Binary Search as a divide and conquer algorithm?
      easy
      A. Sort the list first, then search linearly
      B. Check every element one by one until the target is found
      C. Repeatedly split the sorted list in half to find the target
      D. Use a hash table to find the target instantly

      Solution

      1. Step 1: Understand divide and conquer in binary search

        Binary search works by dividing the sorted list into two halves and deciding which half to search next.
      2. Step 2: Identify the correct approach

        It repeatedly splits the list in half, narrowing down the search space until the target is found or no elements remain.
      3. Final Answer:

        Repeatedly split the sorted list in half to find the target -> Option C
      4. Quick Check:

        Divide and conquer = split list halves [OK]
      Hint: Binary search halves the list each step [OK]
      Common Mistakes:
      • Thinking binary search checks every element
      • Assuming list must be unsorted
      • Confusing binary search with linear search
      2. Which of the following is the correct Rust function signature for a binary search function that returns an Option<usize>?
      easy
      A. fn binary_search(arr: &[i32], target: i32) -> Option<usize>
      B. fn binary_search(arr: Vec bool
      C. fn binary_search(arr: &[i32], target: i32) -> usize
      D. fn binary_search(arr: &mut [i32], target: i32) -> i32

      Solution

      1. Step 1: Understand Rust function signature for binary search

        The function takes a slice of integers and a target integer, returning an Option with the index if found.
      2. Step 2: Match the correct signature

        Option<usize> is used to return Some(index) if found or None if not found, matching fn binary_search(arr: &[i32], target: i32) -> Option<usize>.
      3. Final Answer:

        fn binary_search(arr: &[i32], target: i32) -> Option<usize> -> Option A
      4. Quick Check:

        Return Option<usize> for index or None [OK]
      Hint: Use Option<usize> to handle found or not found [OK]
      Common Mistakes:
      • Returning usize without Option causes errors if not found
      • Using Vec instead of slice for input unnecessarily
      • Returning bool loses index information
      3. What will be the output of this Rust code snippet using binary search?
      fn binary_search(arr: &[i32], target: i32) -> Option<usize> {
          let mut left = 0;
          let mut right = arr.len() - 1;
          while left <= right {
              let mid = left + (right - left) / 2;
              if arr[mid] == target {
                  return Some(mid);
              } else if arr[mid] < target {
                  left = mid + 1;
              } else {
                  right = mid - 1;
              }
          }
          None
      }
      
      fn main() {
          let nums = [2, 4, 6, 8, 10];
          println!("{:?}", binary_search(&nums, 6));
      }
      medium
      A. Some(3)
      B. Some(2)
      C. None
      D. Some(1)

      Solution

      1. Step 1: Trace binary search on array [2,4,6,8,10] for target 6

        Initial left=0, right=4, mid=2. arr[2]=6 matches target.
      2. Step 2: Return index 2 wrapped in Some

        Since arr[mid] == target, function returns Some(2).
      3. Final Answer:

        Some(2) -> Option B
      4. Quick Check:

        Index of 6 in array is 2 [OK]
      Hint: Check mid index value equals target first [OK]
      Common Mistakes:
      • Off-by-one errors in mid calculation
      • Confusing index with value
      • Returning None incorrectly when target exists
      4. Identify the bug in this binary search Rust code and choose the correct fix:
      fn binary_search(arr: &[i32], target: i32) -> Option<usize> {
          let mut left = 0;
          let mut right = arr.len();
          while left <= right {
              let mid = left + (right - left) / 2;
              if arr[mid] == target {
                  return Some(mid);
              } else if arr[mid] < target {
                  left = mid + 1;
              } else {
                  right = mid - 1;
              }
          }
          None
      }
      medium
      A. Change while condition to left < right
      B. Change mid calculation to (left + right) / 2 without subtraction
      C. Remove else if and use only if and else
      D. Change right initialization to arr.len() - 1

      Solution

      1. Step 1: Analyze right boundary initialization

        Right is set to arr.len(), which is out of bounds since indexing is 0-based.
      2. Step 2: Fix right to arr.len() - 1 to avoid out-of-bounds access

        Setting right to arr.len() - 1 ensures mid index stays within valid range.
      3. Final Answer:

        Change right initialization to arr.len() - 1 -> Option D
      4. Quick Check:

        Right boundary must be last valid index [OK]
      Hint: Right index = length - 1 for zero-based arrays [OK]
      Common Mistakes:
      • Using arr.len() as right causes panic
      • Changing while condition incorrectly
      • Incorrect mid calculation causing overflow
      5. Given a sorted array with possible duplicate values, how can you modify binary search to find the first occurrence of a target value?
      hard
      A. After finding target at mid, continue searching left half to find earlier occurrence
      B. Return immediately when target is found at mid
      C. Search right half only after finding target
      D. Use linear search after binary search to find first occurrence

      Solution

      1. Step 1: Understand duplicates and first occurrence requirement

        Binary search normally returns any matching index, but to find first occurrence, we must check if earlier duplicates exist.
      2. Step 2: Modify search to continue left after finding target

        When target is found at mid, record index and continue searching left half to find if an earlier occurrence exists.
      3. Final Answer:

        After finding target at mid, continue searching left half to find earlier occurrence -> Option A
      4. Quick Check:

        Find first occurrence by searching left after match [OK]
      Hint: Keep searching left half after finding target [OK]
      Common Mistakes:
      • Stopping search immediately on first match
      • Searching right half instead of left
      • Using linear search unnecessarily
      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