LeetCode 2831.找出最长等值子数组(cpp, python3)

题目链接:2831.找出最长等值子数组

> 将元素值为下标索引,将元素在数组nums中的出现位置记录在二维数组position中,position每个下标对应的数组都是下标索引在nums中的出现位置

> 记position的下标为index,index在nums中的出现次数为positionindex.size(),记作cnt1,而在nums数组中index第一次出现到最后一次出现,这个范围内nums的元素个数为:positionindexposition\[index.size() - 1] - positionindex0 + 1,记作cnt2,那么cnt2 - cnt1就等于需要删除的元素的个数,删除之后最长等值数组的长度就等于滑动窗口的right - left + 1

cpp实现:

cpp 复制代码
class Solution {
public:
    int longestEqualSubarray(vector<int>& nums, int k) {
        int ans = 0; // 初始化长度为0
        vector<vector<int>> position(nums.size() + 1); //定义nums中元素出现的下标数组
        for (int i = 0; i < nums.size(); i++) {
            position[nums[i]].push_back(i); 
        }
        for (auto& e : position) { //分别遍历每一个元素所对应的下标
            int left = 0; //滑动窗口初始化左端点为0
            for (int right = 0; right < e.size(); right++) { //不断移动右端点
                while (e[right] - e[left] + 1 - (right - left + 1) > k) { //当需要移除的元素个数大于k时
                    left += 1; //收缩窗口
                }
                ans = max(ans, right - left + 1); //退出循环之后,说明满足条件,更新ans
            }
        }
        return ans;
    }
};

python3实现:

python 复制代码
class Solution:
    def longestEqualSubarray(self, nums: List[int], k: int) -> int:
        ans = 0
        position = [[] for _ in range(len(nums) + 1)]
        for i, x in enumerate(nums):
            position[x].append(i)
        for e in position:
            left = 0
            for right in range(len(e)):
                while e[right] - e[left] + 1 - (right - left + 1) > k:
                    left += 1
                ans = max(ans, right - left + 1)
        return ans
相关推荐
傻啦嘿哟8 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
迷迭香yy9 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
小程故事多_8010 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_9561219711 小时前
二分算法(知识点+题目)
c++·算法
李昊哲小课11 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
蒙奇·D·路飞-13 小时前
OpenClaw:开源的《合金弹头》精神续作与终极本地部署指南
c++·开源·mfc
2401_8445829513 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统14 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
AndrewHZ14 小时前
【LLM技术全景】阶段总结:技术原理篇核心知识回顾
人工智能·深度学习·算法·语言模型·大模型·llm·芯片开发
SunnyDays101114 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画