Bird
Raised Fist0
DSA Goprogramming~10 mins

Binary Search as Divide and Conquer in DSA Go - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to calculate the middle index in binary search.

DSA Go
mid := (low + [1]) / 2
Drag options to blanks, or click blank then click option'
Alow
Bhigh
Cmid
Dlen(arr)
Attempts:
3 left
💡 Hint
Common Mistakes
Using low twice instead of high.
Using length of array instead of high index.
2fill in blank
medium

Complete the code to check if the middle element is the target.

DSA Go
if arr[mid] == [1] {
Drag options to blanks, or click blank then click option'
Atarget
Bmid
Clow
Dhigh
Attempts:
3 left
💡 Hint
Common Mistakes
Comparing arr[mid] with mid index instead of target.
Using low or high instead of target.
3fill in blank
hard

Fix the error in updating the low index when target is greater than middle element.

DSA Go
if arr[mid] < target {
    [1] = mid + 1
}
Drag options to blanks, or click blank then click option'
Atarget
Bhigh
Clow
Dmid
Attempts:
3 left
💡 Hint
Common Mistakes
Updating high instead of low.
Assigning mid instead of mid + 1.
4fill in blank
hard

Fill both blanks to update the high index when target is less than middle element.

DSA Go
if arr[mid] > target {
    [1] = [2] - 1
}
Drag options to blanks, or click blank then click option'
Ahigh
Blow
Cmid
Dtarget
Attempts:
3 left
💡 Hint
Common Mistakes
Updating low instead of high.
Using target instead of mid.
5fill in blank
hard

Fill all three blanks to complete the binary search loop condition and return statement.

DSA Go
for [1] <= [2] {
    mid := ([1] + [2]) / 2
    if arr[mid] == target {
        return [3]
    }
    // other conditions
}
Drag options to blanks, or click blank then click option'
Alow
Bhigh
Cmid
Dtarget
Attempts:
3 left
💡 Hint
Common Mistakes
Using mid or target in loop condition.
Using wrong variables in mid calculation.

Practice

(1/5)
1. What is the main idea behind Binary Search as a divide and conquer algorithm?
easy
A. It uses recursion to add elements to the array.
B. It searches every element one by one until the target is found.
C. It divides the search range in half each time to find the target efficiently.
D. It sorts the array before searching for the target.

Solution

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

    Binary search splits the search space into two halves and discards one half each time.
  2. Step 2: Identify the efficiency of halving the search space

    By halving the range repeatedly, it quickly narrows down to the target element.
  3. Final Answer:

    It divides the search range in half each time to find the target efficiently. -> Option C
  4. Quick Check:

    Divide and conquer means halving search space [OK]
Hint: Binary search halves the search space each step [OK]
Common Mistakes:
  • Thinking binary search checks every element
  • Confusing sorting with searching
  • Believing binary search adds elements
2. Which of the following is the correct Go syntax to start a binary search loop on a sorted slice arr?
easy
A. for left := 0; left < len(arr); left++ { }
B. for i := 0; i < len(arr); i++ { }
C. while left < right { }
D. for left, right := 0, len(arr)-1; left <= right; { }

Solution

  1. Step 1: Identify Go for-loop syntax for binary search

    Binary search uses two pointers, left and right, initialized to start and end indices.
  2. Step 2: Confirm loop condition and initialization

    The loop continues while left <= right, using Go's for syntax with multiple variables.
  3. Final Answer:

    for left, right := 0, len(arr)-1; left <= right; { } -> Option D
  4. Quick Check:

    Go for-loop with two vars and condition [OK]
Hint: Binary search loop uses two pointers and condition left <= right [OK]
Common Mistakes:
  • Using for-loop with single index only
  • Using while syntax (not valid in Go)
  • Incorrect loop condition like left < right
3. What will be the output of the following Go code snippet?
arr := []int{2, 4, 6, 8, 10}
target := 6
left, right := 0, len(arr)-1
found := false
for left <= right {
  mid := left + (right-left)/2
  if arr[mid] == target {
    found = true
    break
  } else if arr[mid] < target {
    left = mid + 1
  } else {
    right = mid - 1
  }
}
fmt.Println(found)
medium
A. false
B. true
C. 6
D. runtime error

Solution

  1. Step 1: Trace the binary search steps for target 6

    Initial left=0, right=4, mid=2 (arr[2]=6), matches target, so found=true.
  2. Step 2: Confirm loop breaks and prints found

    Loop breaks immediately after finding target, so prints true.
  3. Final Answer:

    true -> Option B
  4. Quick Check:

    Target found at mid index 2 [OK]
Hint: Check mid element equals target first [OK]
Common Mistakes:
  • Not updating left or right correctly
  • Off-by-one errors in mid calculation
  • Assuming output is the target value
4. Identify the bug in this binary search Go code snippet:
arr := []int{1, 3, 5, 7, 9}
target := 4
left, right := 0, len(arr)
for left <= right {
  mid := (left + right) / 2
  if arr[mid] == target {
    fmt.Println("Found")
    break
  } else if arr[mid] < target {
    left = mid + 1
  } else {
    right = mid - 1
  }
}
medium
A. right should be initialized to len(arr)-1, not len(arr)
B. mid calculation should be mid := left - right
C. left should be incremented by 2 instead of 1
D. The loop condition should be left < right

Solution

  1. Step 1: Check initialization of right pointer

    right is set to len(arr), which is out of valid index range (max index is len(arr)-1).
  2. Step 2: Correct right initialization and explain impact

    Setting right to len(arr)-1 fixes out-of-range error when accessing arr[mid].
  3. Final Answer:

    right should be initialized to len(arr)-1, not len(arr) -> Option A
  4. Quick Check:

    Array indices go from 0 to len(arr)-1 [OK]
Hint: Initialize right to last valid index len(arr)-1 [OK]
Common Mistakes:
  • Using len(arr) as index causes runtime error
  • Wrong mid calculation formula
  • Incorrect loop condition causing infinite loop
5. Given a sorted slice arr := []int{1, 2, 2, 2, 3, 4}, how can you modify binary search to find the first occurrence of 2?
hard
A. After finding 2, continue searching left half to find earlier occurrence
B. Return immediately when 2 is found at any position
C. Search the right half after finding 2 to find last occurrence
D. Use linear search instead of binary search

Solution

  1. Step 1: Understand the problem of duplicates in binary search

    Standard binary search returns any occurrence, not necessarily the first.
  2. Step 2: Modify search to continue left after finding target

    When target found, update result and move right pointer to mid-1 to find earlier occurrence.
  3. Final Answer:

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

    Find first occurrence by searching left side after match [OK]
Hint: Keep searching left half after finding target to get first occurrence [OK]
Common Mistakes:
  • Stopping at first found occurrence
  • 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