力扣-2831

题目

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。

如果子数组中所有元素都相等,则认为子数组是一个 等值子数组 。注意,空数组是 等值子数组 。

从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。

子数组 是数组中一个连续且可能为空的元素序列。

示例 1:

输入:nums = [1,3,2,3,1,3], k = 3
输出:3
解释:最优的方案是删除下标 2 和下标 4 的元素。
删除后,nums 等于 [1, 3, 3, 3] 。
最长等值子数组从 i = 1 开始到 j = 3 结束,长度等于 3 。
可以证明无法创建更长的等值子数组。

示例 2:

输入:nums = [1,1,2,2,1,1], k = 2
输出:4
解释:最优的方案是删除下标 2 和下标 3 的元素。 
删除后,nums 等于 [1, 1, 1, 1] 。 
数组自身就是等值子数组,长度等于 4 。 
可以证明无法创建更长的等值子数组。

思路

用一个滑动窗口记录最长的子序列,包括要删除的元素,在窗口内统计每个数的个数,使得窗口内的元素个数减去等值元素的个数,结果不超过 k。那么我们只需要求出最大的满足条件的窗口即可

解题方法

用下标i,j表示左右端点,用j<n作为边界值,保证每一个元素都会遍历到,统计每个元素的个数,当数组要删除的元素大于k。i++并更新元素个数,用ans保存最大的元素个数(此时元素一定是符合要求的,求最大就行)

代码

class Solution {
    public int longestEqualSubarray(List<Integer> nums, int k) {
        int n=nums.size();
        int ans=0;
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0,j=0;j<n;j++){
            map.put(nums.get(j), map.getOrDefault(nums.get(j), 0) + 1);
            while(j-i+1-map.get(nums.get(i))>k){
                map.put(nums.get(i),map.get(nums.get(i))-1);
                i++;
            }
            ans=Math.max(ans,map.get(nums.get(j)));
        }
        return ans;
    }
}

相关推荐

  1. -2831

    2024-06-12 18:20:02       8 阅读
  2. 283.移动零

    2024-06-12 18:20:02       32 阅读
  3. -283. 移动零

    2024-06-12 18:20:02       19 阅读
  4. 283. 移动零

    2024-06-12 18:20:02       11 阅读
  5. 2831.找出最长等值子数组

    2024-06-12 18:20:02       7 阅读
  6. 283.移动零(LeetCode)

    2024-06-12 18:20:02       35 阅读
  7. 热题100_双指针_283_移动零

    2024-06-12 18:20:02       37 阅读
  8. 283题:移动零(快慢指针)

    2024-06-12 18:20:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 18:20:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 18:20:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 18:20:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 18:20:02       18 阅读

热门阅读

  1. 过拟合、欠拟合原因及解决办法

    2024-06-12 18:20:02       8 阅读
  2. 站易WordPress

    2024-06-12 18:20:02       8 阅读
  3. 【QT ScrollArea】手势滑动ScrollArea窗口实现

    2024-06-12 18:20:02       8 阅读
  4. 聊聊对Andorid的FileProvider的理解

    2024-06-12 18:20:02       7 阅读
  5. Unity Mirror VR联机开发 房间篇

    2024-06-12 18:20:02       6 阅读
  6. uniapp怎么进行页面的跳转

    2024-06-12 18:20:02       5 阅读
  7. MIPI DSI to DP/eDP

    2024-06-12 18:20:02       7 阅读
  8. 初阶 《函数》 6. 函数的声明和定义

    2024-06-12 18:20:02       6 阅读
  9. 适用于Windows的MySQL安装程序介绍

    2024-06-12 18:20:02       8 阅读
  10. 非递归式实现快速排序

    2024-06-12 18:20:02       5 阅读