Skip to content

Commit 019936d

Browse files
committed
add solution task #347
1 parent 28a8ed2 commit 019936d

File tree

4 files changed

+78
-0
lines changed

4 files changed

+78
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,4 +265,5 @@
265265
- [X] [1. Two Sum](sprint_leetcode/1)
266266
- [X] [19. Remove Nth Node From End of List](sprint_leetcode/19)
267267
- [X] [155. Min Stack](sprint_leetcode/155)
268+
- [X] [347. Top K Frequent Elements](sprint_leetcode/347)
268269
</details>

sprint_leetcode/347/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 347. Top K Frequent Elements
2+
3+
Подробнее о задаче: [Тыц](https://leetcode.com/problems/min-stack/)

sprint_leetcode/347/solution.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import "sort"
4+
5+
func topKFrequent(nums []int, k int) []int {
6+
var hMap = make(map[int]int)
7+
for i := 0; i < len(nums); i++ {
8+
hMap[nums[i]] += 1
9+
}
10+
11+
var d = 0
12+
keys := make([]int, len(hMap))
13+
for key := range hMap {
14+
keys[d] = key
15+
d++
16+
}
17+
sort.Slice(keys, func(a, b int) bool {
18+
return hMap[keys[a]] > hMap[keys[b]]
19+
})
20+
21+
var result = make([]int, k)
22+
for i := 0; i < len(keys) && i < k; i++ {
23+
result[i] = keys[i]
24+
}
25+
26+
return result
27+
}

sprint_leetcode/347/solution_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"reflect"
6+
"testing"
7+
)
8+
9+
type TestItemInput struct {
10+
arr []int
11+
k int
12+
}
13+
14+
type TestItem struct {
15+
input TestItemInput
16+
output []int
17+
}
18+
19+
func TestTask(t *testing.T) {
20+
for i, v := range generateTasks() {
21+
t.Run(fmt.Sprintf("Test %d", i+1), func(t *testing.T) {
22+
res := topKFrequent(v.input.arr, v.input.k)
23+
if !reflect.DeepEqual(res, v.output) {
24+
t.Errorf("Wrong test.\nOutput: \n%v \nExpected: \n%v", res, v.output)
25+
}
26+
})
27+
}
28+
}
29+
30+
func generateTasks() []TestItem {
31+
return []TestItem{
32+
{
33+
input: TestItemInput{
34+
arr: []int{1, 1, 1, 2, 2, 3},
35+
k: 2,
36+
},
37+
output: []int{1, 2},
38+
},
39+
{
40+
input: TestItemInput{
41+
arr: []int{1, 1, 2, 4, 1, 3, 3, 4, 10},
42+
k: 3,
43+
},
44+
output: []int{1, 4, 3},
45+
},
46+
}
47+
}

0 commit comments

Comments
 (0)