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;
    }
};