LeetCode #697. Degree of an Array
阿新 • • 發佈:2020-11-04
題目
解題方法
建立三個字典degree、start、end,分別表示每個數字的度、起始位置和終止位置。遍歷陣列,維護這三個字典。然後找到degree中最大的度maxdegree,設定最小子集長度minarrlength為len(nums),遍歷字典degree,找到所有度數為maxdegree的數並根據start和end求得它的起始位置到結束位置之間的長度,取這個長度值的最小值給minarrlength,返回即可。
時間複雜度:O(2n),遍歷nums、遍歷degree
空間複雜度:O(3n),degree、start、end三個字典
程式碼
class Solution: def findShortestSubArray(self, nums: List[int]) -> int: degree = {} start = {} end = {} for i in range(len(nums)): if nums[i] not in degree: degree[nums[i]] = 1 start[nums[i]] = i else: degree[nums[i]] += 1 end[nums[i]] = i maxdegree = max(degree.values()) minarrlength = len(nums) for i in degree: if degree[i] == maxdegree: arrlength = end[i] - start[i] + 1 minarrlength = min(minarrlength, arrlength) return minarrlength