Go•degree-of-an-array/solution.go
package main
func findShortestSubArray(nums []int) int {
count, first := map[int]int{}, map[int]int{}
degree, shortest := 0, len(nums)
for index, value := range nums {
if _, ok := first[value]; !ok {
first[value] = index
}
count[value]++
span := index - first[value] + 1
if count[value] > degree {
degree, shortest = count[value], span
} else if count[value] == degree && span < shortest {
shortest = span
}
}
return shortest
}
Python•degree-of-an-array/solution.py
class Solution:
def findShortestSubArray(self, nums: list[int]) -> int:
count: dict[int, int] = {}
first: dict[int, int] = {}
degree, shortest = class="syntax-number">0, len(nums)
for index, value in enumerate(nums):
first.setdefault(value, index)
count[value] = count.get(value, class="syntax-number">0) + class="syntax-number">1
span = index - first[value] + class="syntax-number">1
if count[value] > degree: degree, shortest = count[value], span
elif count[value] == degree: shortest = min(shortest, span)
return shortest
TypeScript•degree-of-an-array/solution.ts
function findShortestSubArray(nums: number[]): number {
const count = new Map<number, number>();
const first = new Map<number, number>();
let degree = class="syntax-number">0;
let shortest = nums.length;
nums.forEach((value, index) => {
if (!first.has(value)) first.set(value, index);
const nextCount = (count.get(value) ?? class="syntax-number">0) + class="syntax-number">1;
count.set(value, nextCount);
const span = index - first.get(value)! + class="syntax-number">1;
if (nextCount > degree) { degree = nextCount; shortest = span; }
else if (nextCount === degree) shortest = Math.min(shortest, span);
});
return shortest;
}