Skip to content

Commit c86abd6

Browse files
committed
Added 229. Majority Element II
1 parent 214932f commit c86abd6

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package majority_element_II
2+
3+
func majorityElement(nums []int) []int {
4+
count := make(map[int]int)
5+
6+
for _, n := range nums {
7+
count[n]++
8+
9+
if len(count) <= 2 {
10+
continue
11+
}
12+
13+
new_count := make(map[int]int)
14+
for k, v := range count {
15+
if v > 1 {
16+
new_count[k] = v - 1
17+
}
18+
}
19+
count = new_count
20+
}
21+
22+
res := make([]int, 0)
23+
seen := make(map[int]bool)
24+
25+
for k := range count {
26+
if seen[k] {
27+
continue
28+
}
29+
occurrence := 0
30+
for _, n := range nums {
31+
if n == k {
32+
occurrence++
33+
}
34+
}
35+
if occurrence > len(nums)/3 {
36+
res = append(res, k)
37+
}
38+
seen[k] = true
39+
}
40+
41+
return res
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package majority_element_II
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func MajorityElementTest(t *testing.T) {
9+
tests := []struct {
10+
name string
11+
nums []int
12+
expectedResult []int
13+
} {
14+
{
15+
name: "Test Case 1",
16+
nums: []int{3,2,3},
17+
expectedResult: []int{3},
18+
},
19+
{
20+
name: "Test Case 2",
21+
nums: []int{1},
22+
expectedResult: []int{1},
23+
},
24+
{
25+
name: "Test Case 3",
26+
nums: []int{1,2},
27+
expectedResult: []int{1,2},
28+
},
29+
}
30+
31+
for _, test := range tests {
32+
t.Run(test.name, func(t * testing.T) {
33+
got := majorityElement(test.nums)
34+
if !reflect.DeepEqual(got, test.expectedResult) {
35+
t.Errorf("majorityElement( %v ) = %v; want = %v", test.nums, got, test.expectedResult)
36+
}
37+
})
38+
}
39+
}

0 commit comments

Comments
 (0)