Bird
Raised Fist0
DSA Goprogramming~30 mins

Binary Search as Divide and Conquer in DSA Go - Build from Scratch

Choose your learning style10 modes available
Binary Search as Divide and Conquer
📖 Scenario: You are helping a librarian find a specific book in a sorted list of book IDs quickly. Instead of checking each book one by one, you will use a smart method called binary search that splits the list in half repeatedly to find the book faster.
🎯 Goal: Build a Go program that uses binary search to find the position of a given book ID in a sorted list of book IDs.
📋 What You'll Learn
Create a sorted slice of integers representing book IDs
Create a variable for the target book ID to find
Implement the binary search logic using divide and conquer
Print the index of the target book ID if found, or -1 if not found
💡 Why This Matters
🌍 Real World
Binary search is used in many real-world applications like searching in phone contacts, dictionaries, or any sorted data quickly.
💼 Career
Understanding binary search is fundamental for software engineers to optimize search operations and improve program efficiency.
Progress0 / 4 steps
1
Create the sorted list of book IDs
Create a slice of integers called books with these exact values: 101, 203, 305, 407, 509, 611, 713.
DSA Go
Hint

Use a slice literal with the exact numbers in ascending order.

2
Set the target book ID to find
Create an integer variable called target and set it to 407.
DSA Go
Hint

Use a simple variable assignment for the target book ID.

3
Implement binary search logic
Write a binary search using a for loop with variables left, right, and mid to find target in books. Update left and right to narrow the search until target is found or the search ends.
DSA Go
Hint

Use a loop that runs while left is less than or equal to right. Calculate mid as the middle index. Compare books[mid] with target and adjust left or right accordingly.

4
Print the result index
Print the value of the variable index which holds the position of target in books, or -1 if not found.
DSA Go
Hint

Use fmt.Println(index) to show the result.

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