LeetCode 2831 找出最长等值子数组

LeetCode 2831 找出最长等值子数组

🟠 中等偏上

https://leetcode.cn/problems/find-the-longest-equal-subarray/description/

思路

先遍历一遍,得到相同的数的位置,再在这些位置上进行滑动窗口。

讲解

class Solution {

public:

    int longestEqualSubarray(vector<int>& nums, int k) {

        unordered_map<int,vector<int>> Map;

        for(int i=0;i<nums.size();i++){

            Map[nums[i]].push_back(i);

        }

        int res = 0;

        for(auto [key,pos]:Map){

  

            int left = 0;

            for(int i = 0;i<pos.size();i++){

                while(i<pos.size()&& (pos[i]-pos[left]+1)-(i-left+1)>k){

                    left++;

                }

                res = max(i-left+1,res);

            }

        }

  

        return res;

    }

};