GOLANG_INTERVIEW Telegram 226
👣 Задача топ k наиболее часто встречающихся элементов

Сложность: Средняя

Условие задачи: Дан целочисленный массив и целое число k. Необходимо вернуть k часто встречающихся элементов. Порядок чисел в ответе не имеет значения.

Гарантируется, что ответ уникальный. То есть несколько элементов не могут встречаться одинаковое количество раз.

Пример:

Ввод: nums = [1,1,1,2,2,3], k = 2
Вывод: [1,2]

Ввод: nums = [1], k = 1
Вывод: [1]

Решение:

func topKFrequent(nums []int, k int) []int {
dict := make(map[int]int)

for _, num := range nums {
dict[num]++
}

arr := [][]int{}
for key, value := range dict {
arr = append(arr, []int{key, value})
}

n := len(arr)
quickSelect(arr,0, n-1, n-k)

res := []int{}
for i := n-k; i < n; i++ {
res = append(res, arr[i][0])
}

return res
}

func quickSelect(arr [][]int, start, end, k int) {
if start < end {
pivot := partition(arr, start, end)
if pivot == k {
return
} else if pivot < k {
quickSelect(arr, pivot+1, end, k)
} else {
quickSelect(arr, start, pivot-1, k)
}
}
}

func partition(arr [][]int, start, end int) int {
idx := start-1
pivot := end

for i := start; i < end; i++ {
if arr[i][1] < arr[pivot][1] {
idx++
arr[idx], arr[i] = arr[i], arr[idx]
}
}
idx++
arr[idx], arr[pivot] = arr[pivot], arr[idx]
return idx
}

Временная сложность:
O(N
Пространственная сложность:
O(N)


Пишите свое решение в комментариях👇

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍41



tgoop.com/golang_interview/226
Create:
Last Update:

👣 Задача топ k наиболее часто встречающихся элементов

Сложность: Средняя

Условие задачи: Дан целочисленный массив и целое число k. Необходимо вернуть k часто встречающихся элементов. Порядок чисел в ответе не имеет значения.

Гарантируется, что ответ уникальный. То есть несколько элементов не могут встречаться одинаковое количество раз.

Пример:

Ввод: nums = [1,1,1,2,2,3], k = 2
Вывод: [1,2]

Ввод: nums = [1], k = 1
Вывод: [1]

Решение:

func topKFrequent(nums []int, k int) []int {
dict := make(map[int]int)

for _, num := range nums {
dict[num]++
}

arr := [][]int{}
for key, value := range dict {
arr = append(arr, []int{key, value})
}

n := len(arr)
quickSelect(arr,0, n-1, n-k)

res := []int{}
for i := n-k; i < n; i++ {
res = append(res, arr[i][0])
}

return res
}

func quickSelect(arr [][]int, start, end, k int) {
if start < end {
pivot := partition(arr, start, end)
if pivot == k {
return
} else if pivot < k {
quickSelect(arr, pivot+1, end, k)
} else {
quickSelect(arr, start, pivot-1, k)
}
}
}

func partition(arr [][]int, start, end int) int {
idx := start-1
pivot := end

for i := start; i < end; i++ {
if arr[i][1] < arr[pivot][1] {
idx++
arr[idx], arr[i] = arr[i], arr[idx]
}
}
idx++
arr[idx], arr[pivot] = arr[pivot], arr[idx]
return idx
}

Временная сложность:
O(N
Пространственная сложность:
O(N)


Пишите свое решение в комментариях👇

@golang_interview

BY Golang вопросы собеседований


Share with your friend now:
tgoop.com/golang_interview/226

View MORE
Open in Telegram


Telegram News

Date: |

Clear Some Telegram Channels content management tips Telegram desktop app: In the upper left corner, click the Menu icon (the one with three lines). Select “New Channel” from the drop-down menu. Earlier, crypto enthusiasts had created a self-described “meme app” dubbed “gm” app wherein users would greet each other with “gm” or “good morning” messages. However, in September 2021, the gm app was down after a hacker reportedly gained access to the user data. "Doxxing content is forbidden on Telegram and our moderators routinely remove such content from around the world," said a spokesman for the messaging app, Remi Vaughn.
from us


Telegram Golang вопросы собеседований
FROM American