0
for i := len(nums) - 1; i >= 0; i-- {
num := nums[i]
if lastSeen != num {
lastSeen = num
continue
}
duplicatesCount += 1
nums = append(nums[:i], nums[i+1:]...)
}
log.Println("[RemoveDuplicates]: ", nums)
return duplicatesCount
}
func main() {
test := []int{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}
log.Println(removeDuplicates(test))
log.Println("Main thread:", test)
}
output
2023/06/05 21:08:55 [RemoveDuplicates]: [0 1 2 3 4]
2023/06/05 21:08:55 5
2023/06/05 21:08:55 Main thread: [0 1 2 3 4 4 4 4 4 4]
Что я делаю не так?))
(slice в мейн треде, лог)
Дубликаты можно удалять более эффективным способом через мапу func Unique[T comparable](a []T) []T { if len(a) == 0 { return nil } var unique []T m := make(map[T]struct{}) for _, elem := range a { if _, ok := m[elem]; !ok { unique = append(unique, elem) m[elem] = struct{}{} // mark as used } } return unique }
Почитайте про то как устроены слайсы, вопросы отпадут
судя по всему у него он уже отсортирован, ему просто нужно вернуть слайс немного обрезанный ) но я не настоящий годев)
Прочел, не отпали, пришел в чат
for i := len(nums) - 1; i >= 0; i-- { Заорал. Дальше не читал
ну это нормально, если мы хотим пройтись с конца
а слайс сортированный у вас? если нет - можно ли отсортировать? если да - https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable
внутри функции копия слайса. Она не видна в мейне
Да, спасибо, проблема в двух интовых типах
неверно. Копия заголовка слайса
мы его слайсом называем
кого? Заголовки? Хорошо, но ситуацию это не меняет. Не нужно водить человека по ложным догадкам
ложным догадкам? Вопрос: почему в мейне и внутри функци разные элементы выводятся. Ответ: потому что разные слайсы в мейне и внутри функции. Что к этому привело - вопрос следующий, я на него не отвечал
понял, тогда беру свои слова назад. Низлежащий массив один и тот же, только в мейне len чуть больше нужного
Лучше брать и писать в мапу по ключу, и потом брать из мапы ключ с самым большим значением.
Обсуждают сегодня