Leetcode 697 Solution

This article provides solution to leetcode question 697 (degree-of-an-array).

https://leetcode.com/problems/degree-of-an-array

Solution

class Solution {
public:
    int findShortestSubArray(vector<int>& nums) {
        int max_degree = 0;
        int min_len = 10000000;

        map<int, int> degrees;
        map<int, int> start;
        map<int, int> end;
        
        for (int i = 0; i < nums.size(); i++)
        {
            int num = nums[i];

            degrees[num] += 1;
            
            if (start.find(num) == start.end())
                start[num] = i;
            end[num] = i;
            
            max_degree = max(max_degree, degrees[num]);
        }
        
        for (auto it = degrees.begin(); it != degrees.end(); it++)
        {
            int num = it->first;
            int degree = it->second;
            
            if (degree == max_degree)
                min_len = min(min_len, end[num] - start[num] + 1);
        }
        
        return min_len;
    }
};