Drill

ProblemsGo › patterns

Collapse repeats in a sorted feed

easypatternsTwo pointersArraysGo

A sorted export repeats an id whenever a row was touched twice. The importer wants each id once, still in order.

dedupeSorted(ids: list<int>) → list<int>

Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

func dedupeSorted(ids []int) []int {
	
}

Worked examples

CallResult
dedupeSorted([]int{1, 1, 2, 3, 3, 3})[]int{1, 2, 3}
dedupeSorted([]int{1, 2, 3})[]int{1, 2, 3}
dedupeSorted([]int{5, 5, 5, 5})[]int{5}
dedupeSorted([]int{})[]int{}

Hint

Because it is sorted you only ever need to compare against the value you kept last. Walk forward and keep a value only when it differs from that one.

Reference solution in Go
func dedupeSorted(ids []int) []int {
	out := []int{}
	for _, id := range ids {
	    if len(out) == 0 || out[len(out)-1] != id {
	        out = append(out, id)
	    }
	}
	return out
}

The same problem in another language

More patterns problems in Go