lc697. Degree of an Array

190 阅读1分钟

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)