170 похожих чатов

Func removeDuplicates(nums []int) int { lastSeen := -1 duplicatesCount :=

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 в мейн треде, лог)

18 ответов

10 просмотров

Дубликаты можно удалять более эффективным способом через мапу 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 }

Почитайте про то как устроены слайсы, вопросы отпадут

Danylo TERMINATOR
Дубликаты можно удалять более эффективным способом...

судя по всему у него он уже отсортирован, ему просто нужно вернуть слайс немного обрезанный ) но я не настоящий годев)

Anton- Автор вопроса

for i := len(nums) - 1; i >= 0; i-- { Заорал. Дальше не читал

Сергей Козуб
for i := len(nums) - 1; i >= 0; i-- { Заорал. Дал...

ну это нормально, если мы хотим пройтись с конца

а слайс сортированный у вас? если нет - можно ли отсортировать? если да - https://github.com/golang/go/wiki/SliceTricks#in-place-deduplicate-comparable

внутри функции копия слайса. Она не видна в мейне

Anton- Автор вопроса
Rostislav Teryaev
внутри функции копия слайса. Она не видна в мейне

Да, спасибо, проблема в двух интовых типах

Rostislav Teryaev
мы его слайсом называем

кого? Заголовки? Хорошо, но ситуацию это не меняет. Не нужно водить человека по ложным догадкам

Павло Побуджувач
кого? Заголовки? Хорошо, но ситуацию это не меняет...

ложным догадкам? Вопрос: почему в мейне и внутри функци разные элементы выводятся. Ответ: потому что разные слайсы в мейне и внутри функции. Что к этому привело - вопрос следующий, я на него не отвечал

Rostislav Teryaev
ложным догадкам? Вопрос: почему в мейне и внутри ф...

понял, тогда беру свои слова назад. Низлежащий массив один и тот же, только в мейне len чуть больше нужного

Лучше брать и писать в мапу по ключу, и потом брать из мапы ключ с самым большим значением.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Всем здравствуйте!) У меня такой вопрос. Есть два роута, роут1 и роут2. Они связаны с очередью some_queue. По задаче предполагается, что есть два паблиша. Паблиш1 отправляет...
Format
10
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта