Bird
Raised Fist0
DSA Goprogramming~10 mins

Merge Overlapping Intervals 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 sort intervals by their start value.

DSA Go
sort.Slice(intervals, func(i, j int) bool {
    return intervals[i].Start [1] intervals[j].Start
})
Drag options to blanks, or click blank then click option'
A>
B<
C==
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using > instead of < causes descending order, which breaks merging.
Using == or != does not sort properly.
2fill in blank
medium

Complete the code to check if two intervals overlap.

DSA Go
if intervals[i].Start [1] merged[len(merged)-1].End {
    // merge intervals
}
Drag options to blanks, or click blank then click option'
A<=
B<
C==
D>
Attempts:
3 left
💡 Hint
Common Mistakes
Using > reverses the logic and misses overlaps.
Using == only checks exact matches, missing overlaps.
3fill in blank
hard

Fix the error in updating the end of the last merged interval.

DSA Go
merged[len(merged)-1].End = [1](merged[len(merged)-1].End, intervals[i].End)
Drag options to blanks, or click blank then click option'
Asum
Bmin
Cmax
Dabs
Attempts:
3 left
💡 Hint
Common Mistakes
Using min shortens the interval incorrectly.
Using sum or abs does not make sense for interval ends.
4fill in blank
hard

Fill both blanks to append the first interval and start merging from the second.

DSA Go
merged := []Interval[1]
for i := 1; i < len(intervals); i++ {
    // merging logic
}
Drag options to blanks, or click blank then click option'
Aintervals[0]
Bintervals[1]
CInterval{}
Dnil
Attempts:
3 left
💡 Hint
Common Mistakes
Starting merged empty causes index errors.
Looping from 0 duplicates the first interval.
5fill in blank
hard

Fill all three blanks to complete the merge function returning merged intervals.

DSA Go
func merge(intervals []Interval) []Interval {
    if len(intervals) == 0 {
        return [1]
    }
    sort.Slice(intervals, func(i, j int) bool {
        return intervals[i].Start [2] intervals[j].Start
    })
    merged := []Interval[3]
    for i := 1; i < len(intervals); i++ {
        if intervals[i].Start <= merged[len(merged)-1].End {
            merged[len(merged)-1].End = max(merged[len(merged)-1].End, intervals[i].End)
        } else {
            merged = append(merged, intervals[i])
        }
    }
    return merged
}
Drag options to blanks, or click blank then click option'
Anil
B<
Cintervals[0]
D[]Interval{}
Attempts:
3 left
💡 Hint
Common Mistakes
Returning nil can cause nil pointer errors.
Sorting with > reverses order.
Starting merged empty causes errors.

Practice

(1/5)
1. What is the main goal when merging overlapping intervals in a list like [[1,3],[2,6],[8,10]]?
easy
A. Remove all intervals that overlap
B. Sort intervals by their end values only
C. Combine intervals that overlap into one continuous interval
D. Split intervals into smaller parts

Solution

  1. Step 1: Understand overlapping intervals

    Intervals overlap if one starts before the other ends. For example, [1,3] and [2,6] overlap because 2 is between 1 and 3.
  2. Step 2: Merge overlapping intervals

    We combine overlapping intervals into one that covers the full range, like merging [1,3] and [2,6] into [1,6].
  3. Final Answer:

    Combine intervals that overlap into one continuous interval -> Option C
  4. Quick Check:

    Merging = Combine overlaps [OK]
Hint: Merge intervals by combining overlapping ranges [OK]
Common Mistakes:
  • Only sorting by end values
  • Removing instead of merging overlaps
  • Splitting intervals unnecessarily
2. Which Go code snippet correctly sorts intervals by their start value before merging?
easy
A. sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
B. sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] > intervals[j][0] })
C. sort.Slice(intervals, func(i, j int) bool { return intervals[i][1] < intervals[j][1] })
D. sort.Slice(intervals, func(i, j int) bool { return intervals[i][1] > intervals[j][1] })

Solution

  1. Step 1: Identify sorting by start value

    We want to sort intervals by their first element (start), so the comparison should be intervals[i][0] < intervals[j][0].
  2. Step 2: Match with Go sort.Slice syntax

    sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] }) uses sort.Slice with the correct comparison function for start values.
  3. Final Answer:

    sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] }) -> Option A
  4. Quick Check:

    Sort by start = sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] }) [OK]
Hint: Sort intervals by start using intervals[i][0] < intervals[j][0] [OK]
Common Mistakes:
  • Sorting by end value instead of start
  • Using greater than instead of less than
  • Mixing start and end indices
3. What is the output of the following Go code that merges intervals?
package main
import (
  "fmt"
  "sort"
)
func merge(intervals [][]int) [][]int {
  if len(intervals) == 0 {
    return intervals
  }
  sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
  merged := [][]int{intervals[0]}
  for i := 1; i < len(intervals); i++ {
    last := merged[len(merged)-1]
    if intervals[i][0] <= last[1] {
      if intervals[i][1] > last[1] {
        last[1] = intervals[i][1]
      }
    } else {
      merged = append(merged, intervals[i])
    }
  }
  return merged
}
func main() {
  intervals := [][]int{{1,3},{2,4},{5,7},{6,8}}
  fmt.Println(merge(intervals))
}
medium
A. [[1 3] [2 4] [5 7] [6 8]]
B. [[1 3] [5 8]]
C. [[1 4] [5 7]]
D. [[1 4] [5 8]]

Solution

  1. Step 1: Sort intervals by start

    Intervals sorted: [[1,3],[2,4],[5,7],[6,8]] (already sorted).
  2. Step 2: Merge overlapping intervals

    [1,3] and [2,4] overlap, merged to [1,4]. [5,7] and [6,8] overlap, merged to [5,8]. Final merged list: [[1,4],[5,8]].
  3. Final Answer:

    [[1 4] [5 8]] -> Option D
  4. Quick Check:

    Merged intervals = [[1 4] [5 8]] [OK]
Hint: Sort then merge by comparing current start with last merged end [OK]
Common Mistakes:
  • Not updating the end value when merging
  • Appending intervals without checking overlap
  • Incorrect sorting order
4. Find the error in this Go code snippet for merging intervals:
func merge(intervals [][]int) [][]int {
  sort.Slice(intervals, func(i, j int) bool { return intervals[i][0] < intervals[j][0] })
  merged := [][]int{}
  for _, interval := range intervals {
    if len(merged) == 0 || merged[len(merged)-1][1] < interval[0] {
      merged = append(merged, interval)
    } else {
      merged[len(merged)-1][1] = interval[1]
    }
  }
  return merged
}
medium
A. Does not sort intervals before merging
B. Does not check if new interval end is greater before updating
C. Appends intervals without checking overlap
D. Returns original intervals instead of merged

Solution

  1. Step 1: Review merging logic

    The code updates the end of last merged interval directly with interval[1] without checking if it's greater.
  2. Step 2: Identify missing condition

    It should update only if interval[1] > merged[len(merged)-1][1] to avoid shrinking the interval.
  3. Final Answer:

    Does not check if new interval end is greater before updating -> Option B
  4. Quick Check:

    Update end only if greater [OK]
Hint: Update merged end only if new interval end is larger [OK]
Common Mistakes:
  • Overwriting end without comparison
  • Skipping sorting step
  • Appending without overlap check
5. Given intervals [[1,4],[4,5],[7,9],[8,10],[12,15]], what is the merged output if intervals that touch at endpoints are considered overlapping?
hard
A. [[1 5] [7 10] [12 15]]
B. [[1 4] [4 5] [7 10] [12 15]]
C. [[1 5] [7 9] [8 10] [12 15]]
D. [[1 4] [7 10] [12 15]]

Solution

  1. Step 1: Understand touching intervals as overlapping

    Intervals like [1,4] and [4,5] touch at 4, so they merge into [1,5]. Similarly, [7,9] and [8,10] overlap and merge into [7,10].
  2. Step 2: Merge all overlapping/touching intervals

    After merging, intervals become [[1,5],[7,10],[12,15]].
  3. Final Answer:

    [[1 5] [7 10] [12 15]] -> Option A
  4. Quick Check:

    Touching intervals merge = [[1 5] [7 10] [12 15]] [OK]
Hint: Treat touching intervals as overlapping to merge [OK]
Common Mistakes:
  • Not merging intervals that touch at endpoints
  • Leaving touching intervals separate
  • Incorrectly merging non-overlapping intervals
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