Вернуть разность двух слайсов — элементы left, для которых не нашлось пары в
right. Каждый элемент right «гасит» ровно одно вхождение того же значения
в left.
func Diff(left, right []int) []int
Требования
- Повторы учитываются: если значение встречается
x раз в left и y раз в
right, в ответе оно встречается max(x − y, 0) раз.
- Порядок
left сохраняется. Гасятся первые вхождения: из
[5 6 5] минус [5] получается [6 5].
- Время O(len(left) + len(right)). Входы не меняются,
nil и пустые входы
допустимы.
Пример
Diff([]int{5, 6, 7}, []int{5, 6}) // [7]
Diff([]int{5, 6, 5, 7}, []int{7}) // [5 6 5]
Diff([]int{5, 6, 5, 7}, []int{5, 9}) // [6 5 7]
Устно: как изменится код, если повторов нет и порядок не важен? А если
гасить нужно последние вхождения, а не первые?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.