697. Degree of an Array
Given a non-empty array of non-negative integers nums, the degree of this array is defined as the maximum frequency of any one of its elements.
Your task is to find the smallest possible length of a (contiguous) subarray of nums, that has the same degree as nums.
Example 1:
Input: [1, 2, 2, 3, 1]
Output: 2
Explanation: 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.
Example 2:
Input: [1,2,2,3,1,4,2]
Output: 6
Note:
nums.length will be between 1 and 50,000. nums[i] will be an integer between 0 and 49,999.
思路:
1. 首先记录每个数字的头尾位置
2. 找出出现次数最多的数字,即为这个数组的度
3. 比较出现次数最多的数字中,头尾距离最短的,返回长度
代码:python3
class Solution:
def findShortestSubArray(self, nums: List[int]) -> int:
first,last={},{}
for index,value in enumerate(nums):
if value in first:
last[value]=index
else:
first[value]=index
last[value]=index
countDic=collections.Counter(nums)
maxValue=max(countDic.values())
maxArr=[value for value in countDic.keys() if countDic[value]==maxValue]
return min(last[key]-first[key]+1 for key in maxArr)