LeetCode 697. Degree of an Array

本文解析了LeetCode上Degree of an Array题目,详细介绍了如何寻找数组中具有最高频率元素的最短连续子数组长度。通过使用unordered_map进行元素频率及位置记录,实现了高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Degree of an Array - LeetCode

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

Note:

nums.length will be between 1 and 50,000.
nums[i] will be an integer between 0 and 49,999.


map操作

class Solution {
public:
    unordered_map<int, pair<int, int>> map1;
    unordered_map<int, int> numscount;
    int degree = 0, ans = INT_MAX;
    int findShortestSubArray(vector<int>& nums) {
        for (int i = 1; i <= nums.size(); i ++ ) {
            int cur = nums[i-1];
            if (!map1[cur].first) map1[cur].first = i;
            if (i > map1[cur].second) map1[cur].second = i;
            numscount[cur] ++;
            degree = max(degree, numscount[cur]);
        }
        for (int i = 1; i <= nums.size(); i ++ ) {
            int cur = nums[i-1];
            if (degree == numscount[cur])
                ans = min(ans, map1[cur].second - map1[cur].first + 1);
        }
       
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值