LeetCode 697. Degree of an Array 新解法,基于稳定排序和参数排序

class Solution {
public:
    int findShortestSubArray(vector<int>& nums) {
        if (nums.size() == 0){
            return 0;
        }
        
        vector<pair<int, int>> argVec;
        for(int i = 0; i < nums.size(); ++i){
            argVec.push_back(make_pair(nums[i], i));
        }
        
        stable_sort(argVec.begin(), argVec.end());
        
        int curCount = 1,  maxCount = 1, curLen = 1, minLen = INT_MAX, start = 0;
        for (int i = 1; i < argVec.size(); ++i){
            if (argVec[i].first == argVec[i - 1].first){
                curCount++;
                if (curCount > maxCount){
                    maxCount = curCount;
                    minLen = argVec[i].second - argVec[start].second + 1;
                }else if (curCount == maxCount && argVec[i].second - argVec[start].second + 1 < minLen){
                    minLen = argVec[i].second - argVec[start].second + 1;
                }
            }else{
                start = i;
                curCount = 1;
                curLen = 1;
            }
        }
        return minLen == INT_MAX ? 1 : minLen;
    }
};
已邀请:

要回复问题请先登录注册

返回顶部