Skip to content

Commit 3e933ba

Browse files
authored
feat: add golang solutions to lc problem: No.0697 (doocs#882)
No.0697.Degree of an Array
1 parent 8b7fcac commit 3e933ba

File tree

3 files changed

+213
-0
lines changed

3 files changed

+213
-0
lines changed

solution/0600-0699/0697.Degree of an Array/README.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,80 @@ class Solution {
111111
}
112112
```
113113

114+
### **Go**
115+
116+
<!-- 这里可写当前语言的特殊实现逻辑 -->
117+
118+
```go
119+
func findShortestSubArray(nums []int) (ans int) {
120+
ans = 50000
121+
numsMap := make(map[int]int, len(nums))
122+
for _, num := range nums {
123+
numsMap[num]++
124+
}
125+
var maxDegree int
126+
for _, num := range numsMap {
127+
maxDegree = max(num, maxDegree)
128+
}
129+
degreeNums := getMaxDegreeElem(maxDegree, numsMap)
130+
for _, num := range degreeNums {
131+
f := findSubArray(num, nums)
132+
ans = min(ans, f)
133+
}
134+
return
135+
}
136+
137+
func findSubArray(target int, nums []int) int {
138+
start := getStartIdx(target, nums)
139+
end := getEndIdx(target, nums)
140+
return (end - start) + 1
141+
}
142+
143+
func getStartIdx(target int, nums []int) (start int) {
144+
for idx, num := range nums {
145+
if num == target {
146+
start = idx
147+
break
148+
}
149+
}
150+
return start
151+
}
152+
153+
func getEndIdx(target int, nums []int) (end int) {
154+
for i := len(nums) - 1; i > 0; i-- {
155+
if nums[i] == target {
156+
end = i
157+
break
158+
}
159+
}
160+
return
161+
}
162+
163+
func getMaxDegreeElem(maxDegree int, numsMap map[int]int) []int {
164+
var ans []int
165+
for key, value := range numsMap {
166+
if value == maxDegree {
167+
ans = append(ans, key)
168+
}
169+
}
170+
return ans
171+
}
172+
173+
func min(a, b int) int {
174+
if a > b {
175+
return b
176+
}
177+
return a
178+
}
179+
180+
func max(a, b int) int {
181+
if a > b {
182+
return a
183+
}
184+
return b
185+
}
186+
```
187+
114188
### **...**
115189

116190
```

solution/0600-0699/0697.Degree of an Array/README_EN.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,78 @@ class Solution {
9999
}
100100
```
101101

102+
### **Go**
103+
104+
```go
105+
func findShortestSubArray(nums []int) (ans int) {
106+
ans = 50000
107+
numsMap := make(map[int]int, len(nums))
108+
for _, num := range nums {
109+
numsMap[num]++
110+
}
111+
var maxDegree int
112+
for _, num := range numsMap {
113+
maxDegree = max(num, maxDegree)
114+
}
115+
degreeNums := getMaxDegreeElem(maxDegree, numsMap)
116+
for _, num := range degreeNums {
117+
f := findSubArray(num, nums)
118+
ans = min(ans, f)
119+
}
120+
return
121+
}
122+
123+
func findSubArray(target int, nums []int) int {
124+
start := getStartIdx(target, nums)
125+
end := getEndIdx(target, nums)
126+
return (end - start) + 1
127+
}
128+
129+
func getStartIdx(target int, nums []int) (start int) {
130+
for idx, num := range nums {
131+
if num == target {
132+
start = idx
133+
break
134+
}
135+
}
136+
return start
137+
}
138+
139+
func getEndIdx(target int, nums []int) (end int) {
140+
for i := len(nums) - 1; i > 0; i-- {
141+
if nums[i] == target {
142+
end = i
143+
break
144+
}
145+
}
146+
return
147+
}
148+
149+
func getMaxDegreeElem(maxDegree int, numsMap map[int]int) []int {
150+
var ans []int
151+
for key, value := range numsMap {
152+
if value == maxDegree {
153+
ans = append(ans, key)
154+
}
155+
}
156+
return ans
157+
}
158+
159+
func min(a, b int) int {
160+
if a > b {
161+
return b
162+
}
163+
return a
164+
}
165+
166+
func max(a, b int) int {
167+
if a > b {
168+
return a
169+
}
170+
return b
171+
}
172+
```
173+
102174
### **...**
103175

104176
```
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
func findShortestSubArray(nums []int) (ans int) {
2+
ans = 50000
3+
numsMap := make(map[int]int, len(nums))
4+
for _, num := range nums {
5+
numsMap[num]++
6+
}
7+
var maxDegree int
8+
for _, num := range numsMap {
9+
maxDegree = max(num, maxDegree)
10+
}
11+
degreeNums := getMaxDegreeElem(maxDegree, numsMap)
12+
for _, num := range degreeNums {
13+
f := findSubArray(num, nums)
14+
ans = min(ans, f)
15+
}
16+
return
17+
}
18+
19+
func findSubArray(target int, nums []int) int {
20+
start := getStartIdx(target, nums)
21+
end := getEndIdx(target, nums)
22+
return (end - start) + 1
23+
}
24+
25+
func getStartIdx(target int, nums []int) (start int) {
26+
for idx, num := range nums {
27+
if num == target {
28+
start = idx
29+
break
30+
}
31+
}
32+
return start
33+
}
34+
35+
func getEndIdx(target int, nums []int) (end int) {
36+
for i := len(nums) - 1; i > 0; i-- {
37+
if nums[i] == target {
38+
end = i
39+
break
40+
}
41+
}
42+
return
43+
}
44+
45+
func getMaxDegreeElem(maxDegree int, numsMap map[int]int) []int {
46+
var ans []int
47+
for key, value := range numsMap {
48+
if value == maxDegree {
49+
ans = append(ans, key)
50+
}
51+
}
52+
return ans
53+
}
54+
55+
func min(a, b int) int {
56+
if a > b {
57+
return b
58+
}
59+
return a
60+
}
61+
62+
func max(a, b int) int {
63+
if a > b {
64+
return a
65+
}
66+
return b
67+
}

0 commit comments

Comments
 (0)