697. Degree of an Array

Difficulty:
Related Topics:
Similar Questions:

Problem

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: nums = [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: nums = [1,2,2,3,1,4,2] Output: 6 Explanation: 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. 

  Constraints:

Solution

/** * @param {number[]} nums * @return {number} */ var findShortestSubArray = function(nums) { var map = {}; var degree = 0; for (var i = 0; i < nums.length; i++) { if (!map[nums[i]]) { map[nums[i]] = { left: i, right: i, num: 1, }; } else { map[nums[i]].right = i; map[nums[i]].num += 1; } degree = Math.max(degree, map[nums[i]].num); } var min = Number.MAX_SAFE_INTEGER; for (var i = 0; i < nums.length; i++) { if (map[nums[i]].num === degree) { min = Math.min(map[nums[i]].right - map[nums[i]].left + 1, min); } } return min; }; 

Explain:

nope.

Complexity: