<p>Given a non-empty array of non-negative integers <code>nums</code>, the <b>degree</b> of this array is defined as the maximum frequency of any one of its elements.</p>

<p>Your task is to find the smallest possible length of a (contiguous) subarray of <code>nums</code>, that has the same degree as <code>nums</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,2,2,3,1]
<strong>Output:</strong> 2
<strong>Explanation:</strong> 
The input array has a degree of 2 because both elements 1 and 2 appear twice.
Of the subarrays that have the same degree:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
The shortest length is 2. So return 2.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,2,2,3,1,4,2]
<strong>Output:</strong> 6
<strong>Explanation:</strong> 
The degree is 3 because the element 2 is repeated 3 times.
So [2,2,3,1,4,2] is the shortest subarray, therefore returning 6.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>nums.length</code> will be between 1 and 50,000.</li>
	<li><code>nums[i]</code> will be an integer between 0 and 49,999.</li>
</ul>

class Solution:
    def findShortestSubArray(self, nums: List[int]) -> int:
        size = len(nums)
        if size < 2:
            return size
        max_apps = 1
        appearences = {}
        difs = {}
        firsts = {}
        for g in range(size):
            if nums[g] in appearences:
                appearences[nums[g]] +=1
                difs[nums[g]] = g - firsts[nums[g]] + 1
            else:
                appearences[nums[g]] = 1
                firsts[nums[g]] = g
                difs[nums[g]] = 1
                continue
            if appearences[nums[g]]>max_apps:
                max_apps = appearences[nums[g]]
                max_nums = [nums[g]]
        min_dif = size
        for num in appearences:
            if appearences[num] != max_apps:
                continue
            min_dif = min(min_dif, difs[num])

        return min_dif


        
17700